HDOJ1745 I hate it【线段树】

 

Problem : 1754 ( I Hate It )     Judge Status : Accepted
RunId : 5863027    Language : C    Author : qq1203456195

#include <stdio.h>
#include <stdlib.h>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 200001
int Max[maxn<<2];
void build(int l,int r,int rt)
{
    int m;
    if (l==r)
    {
        scanf("%d",&Max[rt]);
        return;
    }
    m=((l+r)>>1);
    build(lson);
    build(rson);
    Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
}
void update(int p,int updt,int l,int r,int rt)
{
    int m;
    if(l==r)
    {
        Max[rt]=updt;
        return;
    }
    m=((l+r)>>1);
    if (p<=m)
        update(p,updt,lson);
    else
        update(p,updt,rson);
    Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
}
int query(int L,int R,int l,int r,int rt)
{
    int m,ret=0,maxl,maxr;
    if (L<=l&&R>=r)
        return Max[rt];
    m=((l+r)>>1);
    if (R<=m)
        ret=query(L,R,lson);
    else
        if(L>m)
            ret=query(L,R,rson);
        else
        {
            maxl=query(L,m,lson);
            maxr=query(m+1,R,rson);
            ret=max(maxl,maxr);
        }
            
    return ret;
}
int main()
{
    int n,a,b,m,i;
    char op[2];
    while (scanf("%d%d",&n,&m)!=EOF)
    {
        build(1,n,1);
        while (m--)
        {
            scanf("%s%d%d",op,&a,&b);
            if(op[0]=='Q')
                printf("%d\n",query(a,b,1,n,1));
            else
                if(op[0]=='U')
                    update(a,b,1,n,1);
        }
    }
    return 0;
}

 

posted @ 2012-04-28 17:27  ZH奶酪  阅读(409)  评论(0编辑  收藏  举报