题目链接:HDU1754
5 6 1 2 3 4 5 Q 1 5 U 3 6 Q 3 4 Q 4 5 U 2 9 Q 1 5
5 6 5 9HintHuge input,the C function scanf() will work better than cin
// // main.cpp // HDU1754 // // Created by teddywang on 16/4/27. // Copyright © 2016年 teddywang. All rights reserved. // #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 const int maxn=222222; int Max[maxn<<2]; int n,m; void pushup(int rt) { Max[rt]=max(Max[rt<<1], Max[rt<<1|1]); } void build(int l,int r,int rt) { if(l==r) { scanf("%d",&Max[rt]); return ; } int m=(l+r)>>1; build(lson); build(rson); pushup(rt); } void update(int a,int b,int l,int r,int rt) { if(l==r) { Max[rt]=b; return; } int m=(l+r)>>1; if(m>=a) update(a,b,lson); else update(a,b,rson); pushup(rt); } int query(int L,int R,int l,int r,int rt) { if(L<=l&&r<=R) return Max[rt]; int m=(l+r)>>1; int ans=0; if(L<=m) ans=max(ans,query(L,R,lson)); if(R>m) ans=max(ans,query(L,R,rson)); return ans; } int main() { while(~scanf("%d%d",&n,&m)) { build(1,n,1); while(m--) { char op[2]; int a,b; scanf("%s%d%d",op,&a,&b); if(op[0]=='Q') printf("%d\n",query(a,b,1,n,1)); else update(a,b,1,n,1); } } return 0; }