本机上样例能过,但测试点都是RE,下载测试点1后测了一下,main里面不知道什么原因只能输入到a[n-1]
#include<bits/stdc++.h>
using namespace std;
int const X=1e7+10;
int n,m,a[X],tx,x,y,ans[X<<2];
char c;
inline int ls(int rt){
return rt<<2;
}
inline int rs(int rt){
return rt<<2 | 1;
}
void push_up(int rt){
ans[rt]=max(ans[ls(rt)],ans[rs(rt)]);
}
void build(int rt,int L,int R){
if(L==R){
ans[rt]=a[L];
return ;
}
int mid=(L+R)>>1;
build(ls(rt),L,mid);
build(rs(rt),mid+1,R);
push_up(rt);
}
int query(int rt,int L,int R,int qL,int qR){
if(qL<=L && R<=qR){
return ans[rt];
}
int mid=(L+R)>>1,res=-1e9;
if(mid>=qL){
res=max(res,query(ls(rt),L,mid,qL,qR));
}
if(mid+1<=qR){
res=max(res,query(rs(rt),mid+1,R,qL,qR));
}
return res;
}
void change(int rt,int L,int R,int p,int k){
if(L==R){
if(ans[rt]<k) ans[rt]=k;
return ;
}
int mid=(L+R)>>1;
if(mid>=p){
change(ls(rt),L,mid,p,k);
}
else{
change(rs(rt),mid+1,R,p,k);
}
push_up(rt);
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
while(m--){
cin>>c>>x>>y;
if(c=='Q'){
cout<<query(1,1,n,x,y)<<endl;
}
else if(c=='U'){
change(1,1,n,x,y);
}
}
return 0;
}