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/

  • 相关阅读:
    BZOJ 2588
    BZOJ 3524
    BZOJ 3932
    Bzoj1013--Jsoi2008球形空间产生器
    Codevs1743--反转卡片
    Bzoj1208--Hnoi2004宠物收养所
    Bzoj1112--Poi2008砖块Klo
    后缀自动机学习笔记
    Bzoj1588--Hnoi2002营业额统计
    Bzoj1056--Haoi2008排名系统
  • 原文地址:https://www.cnblogs.com/xryz/p/4847885.html
Copyright © 2011-2022 走看看