水题
#include#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define Maxn 205555int max[Maxn<<2];int N,M;void Pushup(int rt){ max[rt]=max[rt<<1]>max[rt<<1|1]?max[rt<<1]:max[rt<<1|1];}void build(int l,int r,int rt){ int m; if(l==r){scanf("%d\n",&max[rt]);return ;} m=(l+r)>>1; build(lson); build(rson); Pushup(rt);}int updata(int p,int k,int l,int r,int rt){ int m; if(l==r){max[rt]=k;return 0;} m=(l+r)>>1; if(p<=m) updata(p,k,lson); else updata(p,k,rson); Pushup(rt);}int query(int L,int R,int l,int r,int rt){ int m,k1=0,k2=0; if(L<=l&&r<=R) return max[rt]; m=(l+r)>>1; if(L<=m) k1=query(L,R,lson); if(R>m) k2=query(L,R,rson); return k1>k2?k1:k2;}int main(){ int i,a,b; char ch; while(scanf("%d%d",&N,&M)==2) { build(1,N,1); for(i=1;i<=M;i++) { scanf("%c%d%d\n",&ch,&a,&b); if(ch=='U') updata(a,b,1,N,1); if(ch=='Q') printf("%d\n",query(a,b,1,N,1)); } } return 0;}