HDU 1754

来源:互联网 发布:windows10网络驱动下载 编辑:程序博客网 时间:2024/05/04 12:05
/*HDU 1754单点更新区间最值*/#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define lson (pos<<1)#define rson (pos<<1|1)const int maxn = 222222;int sum[maxn << 2];void pushup(int pos){    sum[pos] = max(sum[lson] , sum[rson]);}void build(int l,int r,int pos){    if(l == r){        scanf("%d",&sum[pos]);        return;    }    int mid = (l + r) >> 1;    build(l,mid,lson);    build(mid + 1,r,rson);    pushup(pos);}void update(int L,int R,int m,int pos,int d){    if(L == R){        sum[pos] = d;        return;    }    int mid = (L + R) >> 1;    if(m <= mid)        update(L,mid,m,lson,d);    else        update(mid + 1,R,m,rson,d);    pushup(pos);}int query(int L,int R,int l,int r,int pos){    if(l <= L && R <= r)        return sum[pos];    int mid = (L + R) >> 1;    int ans = 0;    if(l <= mid)        ans = max(ans,query(L,mid,l,r,lson));    if(r  > mid)        ans = max(ans,query(mid + 1,R,l,r,rson));    return ans;}int main(){    int n,m;    while(scanf("%d%d",&n,&m) != EOF){        build(1,n,1);        for(int i = 0; i < m; i++){            char op[10];            int a,b;            scanf("%s",op);            if(op[0] == 'U'){                scanf("%d%d",&a,&b);                update(1,n,a,1,b);            }            else{                scanf("%d%d",&a,&b);                printf("%d\n",query(1,n,a,b,1));            }        }    }    return 0;}

0 0