• poj 3264 Balanced Lineup 线段树


    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    
    const int N=200000;
    const int inf=0xffffff0;
    
    int maxv,minv;
    
    struct node
    {
        int l,r;
        int minv,maxv;
    }tree[5*N+50];
    
    void build(int root ,int l,int r)
    {
        tree[root].l=l;
        tree[root].r=r;
        tree[root].maxv=-inf;
        tree[root].minv=inf;
        if(l!=r)
        {
            build(2*root+1,l,(l+r)/2);
            build(2*root+2,(l+r)/2+1,r);
        }
    }
    
    void update(int root,int i ,int v)
    //将第i个且值为v的数插入线段树
    {
        if(tree[root].l==tree[root].r)
        {
            tree[root].minv=tree[root].maxv=v;
            return ;
        }
    
        tree[root].minv=min(tree[root].minv,v);
        tree[root].maxv=max(tree[root].maxv,v);
        int mid=(tree[root].l+tree[root].r)/2;
        if(i<=mid)
            update(root*2+1,i,v);
        else
            update(root*2+2,i,v);
    }
    
    void query(int root,int l,int r)
    {
        if(tree[root].minv>=minv&&tree[root].maxv<=maxv) return ;
    
        if(tree[root].l==l&&tree[root].r==r)
        {
            minv=min(tree[root].minv,minv);
            maxv=max(tree[root].maxv,maxv);
            return ;
        }
    
        int mid=(tree[root].l+tree[root].r)/2;
        if(r<=mid)
        {
            query(2*root+1,l,r);
        }
        else if(l>mid)
        {
            query(2*root+2,l,r);
        }
        else
        {
            query(2*root+1,l,mid);
            query(2*root+2,mid+1,r);
        }
    }
    
    int main()
    {
        int i,j,n,q,a,b,v;
        while(~scanf("%d%d",&n,&q))
        {
            build(0,1,n);
            for(i=1;i<=n;i++)
            {
                scanf("%d",&v);
                update(0,i,v);
            }
            for(i=0;i<q;i++)
            {
                scanf("%d%d",&a,&b);
                maxv=-inf;
                minv=inf;
                query(0,a,b);
                printf("%d
    ",maxv-minv);
            }
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

  • 相关阅读:
    greybox关闭/刷新父窗口
    C# 获取文件编码
    框架页,URL中文参数乱码
    用来代替SQLSERVERAGENT的VBS脚本。
    jQuery的radio,checkbox,select操作
    mssql 的sp_help好难看
    如何判断网通、电信、铁通IP地址分配段
    IE8取不到 select 的option值
    如何识别当前的 SQL Server 版本号以及对应的产品级别
    控诉我的电脑
  • 原文地址:https://www.cnblogs.com/xryz/p/4847885.html
Copyright © 2020-2023  润新知