zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    虚拟机NetworkAdapter三种方式的区别
    skia
    android gralloc是什么意思
    两个工作机会
    Ubuntu apt-get更新源替换及加速方法
    Vuforia和Metaio相继被收购,开发者们还有这些AR引擎可以选
    OpenCV 为啥勾搭上 OpenGL
    感受2万元的黑科技 微软MR头显HoloLens测评
    影创 我们的职位
    java基础-servlet-2:生命周期
  • 原文地址:https://www.cnblogs.com/xryz/p/4847885.html
Copyright © 2011-2022 走看看