hdu 1754 I Hate It (线段树 单点更新)

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

 

照着hdu 1166 的模板稍加改动即可

#include<cstdio>

#include<cstring>

#include<iostream>

#include<algorithm>

using namespace std;

int sum[1000000];

void push(int rt)

{

    sum[rt]=max(sum[rt<<1],sum[rt<<1|1]);

}

void build(int l,int r,int rt)

{

    if(l==r){scanf("%d",&sum[rt]);return ;}

    int m=(l+r)>>1;

    build(l,m,rt<<1);build(m+1,r,rt<<1|1);

    push(rt);

}

void update(int key,int neww,int l,int r,int rt)

{

    if(l==r){ sum[rt]=neww; return ;}

    int m=(l+r)>>1;

    if(key<=m) update(key,neww,l,m,rt<<1);

    else update(key,neww,m+1,r,rt<<1|1);

    push(rt);

}

int query(int L,int R,int l,int r,int rt)

{

    if(L<=l&&r<=R) {return sum[rt];}

    int m=(l+r)>>1;

    int ret1=-1,ret2=-1;

    if(L<=m) ret1=query(L,R,l,m,rt<<1);

    if(R>m)  ret2=query(L,R,m+1,r,rt<<1|1);

    return max(ret1,ret2);

}

int main()

{

    int n,m;

    int i,j,k;

    int l,r;

    char que[10];

    while(scanf("%d%d",&n,&m)!=EOF)

    {

        build(1,n,1);

        while(m--)

        {

            scanf("%s%d%d",&que,&l,&r);

            if(que[0]=='U')

            {

                update(l,r,1,n,1);

            }

            else

            {

                printf("%d\n",query(l,r,1,n,1));

            }

        }

    }

    return 0;

}

 

你可能感兴趣的:(HDU)