HDU

来源:互联网 发布:天盾苹果手机数据恢复软件 编辑:程序博客网 时间:2024/05/29 19:35
#include<bits/stdc++.h>using namespace std;int s[800005];int a[200005];void build(int id,int ll,int rr){    if(ll==rr){        s[id]=a[ll];        return;    }    int mid = (ll+rr)/2;    build(id*2,ll,mid);    build(id*2+1,mid+1,rr);    s[id]=max(s[id*2],s[id*2+1]);}int Querymax(int id,int ll,int rr,int l,int r){    if(l<=ll&&rr<=r)        return s[id];    int mid = (ll+rr)/2;    if(r<=mid)        return Querymax(id*2,ll,mid,l,r);    else if(l>mid)        return Querymax(id*2+1,mid+1,rr,l,r);    else        return max(Querymax(id*2,ll,mid,l,r),Querymax(id*2+1,mid+1,rr,l,r));}void updata(int id,int ll,int rr,int l,int add){    if(l == ll && l == rr){        s[id] = add;        return;    }    int mid = (ll+rr)/2;    if(l<=mid)        updata(id*2,ll,mid,l,add);    else        updata(id*2+1,mid+1,rr,l,add);    s[id] = max(s[id*2],s[id*2+1]);}int main(){    int n,m;    while(~scanf("%d%d",&n,&m)){        for(int i=1;i<=n;i++)            scanf("%d",&a[i]);        build(1,1,n);        while(m--){            char q[5];            scanf("%s",q);            int x,y;            scanf("%d%d",&x,&y);            if(q[0]=='Q')                printf("%d\n",Querymax(1,1,n,x,y));            if(q[0]=='U')                updata(1,1,n,x,y);        }    }    return 0;}