hdu1754(线段树模版题)

http://acm.hdu.edu.cn/showproblem.php?pid=1754

View Code
#include<iostream>
using namespace std;
struct
{
    int l,r,max;
}s[200005*4];
int data[200005];
void build(int l,int r,int n)
{
    int mid=(l+r)/2;
    if(l==r)
    {
        s[n].l=l;
        s[n].r=r;
        s[n].max=data[l];
    }
    else
    {
        s[n].l=l;
        s[n].r=r;
        build(l,mid,n*2);
        build(mid+1,r,n*2+1);
        s[n].max=s[n*2].max>=s[n*2+1].max?s[n*2].max:s[n*2+1].max;
    }
}
int _max(int l,int r,int n)
{
    int mid=(s[n].l+s[n].r)/2;
    if(s[n].l==l&&s[n].r==r)
    {
        return s[n].max;
    }
    else
        if(r<=mid)
            _max(l,r,n*2);
        else
            if(l>mid)
                _max(l,r,n*2+1);
            else
            {
                int a,b;
                a=_max(l,mid,n*2);
                b=_max(mid+1,r,n*2+1);
                if(a>=b)
                    return a;
                else
                    return b;
            }
}
void updata(int i,int j,int n)
{
    int mid=(s[n].l+s[n].r)/2;
    if(s[n].l==i&&s[n].r==i)
    {
        s[n].max=j;
        int count=n/2;
        while(count>=1)
        {
            int a=s[count*2].max;
            int b=s[count*2+1].max;
            s[count].max=a>=b?a:b;
            count/=2;
        }
    }
    else
        if(i<=mid)
            updata(i,j,n*2);
            else
            if(i>mid)
                updata(i,j,n*2+1);
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)>0)
    {
        for(int i=1;i<=n;i++)
            scanf("%d",&data[i]);
        getchar();
        build(1,n,1);
        char c;
        while(m--)
        {
            scanf("%c",&c);
            if(c=='Q')
            {
                int x,y;
                scanf("%d%d",&x,&y);
                printf("%d\n",_max(x,y,1));
            }
            else
                if(c=='U')
                {
                    int x,y;
                    scanf("%d%d",&x,&y);
                    updata(x,y,1);
                }
            getchar();
        }
    }
    return 0;
}

 

posted @ 2012-11-23 08:49  紫忆  阅读(164)  评论(0编辑  收藏  举报