且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

HDOJ1745 I hate it【线段树】

更新时间:2021-08-07 17:18:18

HDOJ1745 I hate it【线段树】
#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;
}
HDOJ1745 I hate it【线段树】

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2012/04/28/2475489.html,如需转载请自行联系原作者