数组开的够大,还是RE
#include <bits/stdc++.h>
#define ls k<<1
#define rs k<<1|1
#define mid (l+r>>1)
using namespace std;
const int N=2e7+10;
int n,m,tr[N<<2];
void build(int k,int l,int r){
if(l==r) {
scanf("%d",&tr[k]);
return;
}
build(ls,1,mid);
build(rs,mid+1,r);
tr[k]=max(tr[ls],tr[rs]);
}
int query(int k,int l,int r,int x,int y){
if(x>r||y<l) return 0;
if(x<=l&&y>=r) return tr[k];
return max(query(ls,l,mid,x,y),query(rs,mid+1,r,x,y));
}
void update(int k,int l,int r,int x,int v){
if(x<l||x>r) return;
if(l==r) {tr[k]=max(tr[k],v);return;}
update(ls,l,mid,x,v);
update(rs,mid+1,r,x,v);
tr[k]=max(tr[ls],tr[rs]);
}
int main(){
scanf("%d%d",&n,&m);
build(1,1,n);
while(m--){
char op[2];
scanf("%s",op);
int a,b;
scanf("%d%d",&a,&b);
if(op[0]=='Q') printf("%d\n",query(1,1,n,a,b));
else update(1,1,n,a,b);
}
return 0;
}