[cpp] <span style="font-size:32px;"> #include<iostream> #include<string> #include<cstring> #include<algorithm> #include<cstdio> #include<cmath> #include<cctype> #include<iomanip> #define Lson left , t , rt<<1 #define Rson t+1 ,right,rt<<1|1 using namespace std; const int maxn=200005; int f[maxn<<2]; void PushUP( int rt ){ f[rt] = max( f[rt<<1], f[rt<<1|1] ); } void build( int left, int right ,int rt ){ if( left==right ){ cin>>f[rt]; return; } int t=(left + right)>>1; build(Lson); build(Rson); PushUP(rt); } void update(int ii,int value,int left, int right, int rt ){ if( left == right ){ f[rt] = value; return; } int t=(left+right)>>1; if(ii<=t) update(ii, value, Lson); else update(ii, value, Rson); PushUP(rt); } int query(int l, int r, int left, int right, int rt ){ if( l<=left && r>=right ) return f[rt]; int t=(left+right)/2; int ret = 0; if(l <= t)ret = max(ret, query( l, r, Lson) ); if(r > t) ret = max(ret, query( l, r, Rson) ); return ret; } int main(){ int n,m; while(cin>>n>>m){ build(1,n,1); while(m--){ char C; int a,b;//for(int i=0;i<=n;++i)cout<<f[i]<<' ';cout<<endl; cin>>C>>a>>b; if(C=='Q') cout<<query(a,b,1,n,1)<<endl; else update(a,b,1,n,1); } } return 0; } </span>