洛谷的P1531好难啊!求助:
#include<cstdio>
#define int long long
int n,m,a[200009],tree[200009];
int lowbit(int x){
return((x)&(-x));
}
int max(int a,int b){
return a>b?a:b;
}
int query(int l,int r){
int res=0;
while(l<=r){
while(r-l>=lowbit(r)){
res=max(res,tree[r]);
r-=lowbit(r);
}
res=max(res,a[r]);
r--;
}
return res;
}
signed main(){
// freopen("Lucy=4b^2.txt","w",stdout);
scanf("%lld %lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&a[i]);
for(int j=i;j<=n;j+=lowbit(j))
tree[j]=max(tree[j],a[i]);
}
// for(int i=1;i<=n;i++){
// printf("%lld\n\n",tree[i]);
// }
for(int i=1;i<=m;i++){
char _c;
int _a,_b;
scanf(" %c%lld%lld",&_c,&_a,&_b);
if(_c=='Q') printf("%lld\n",query(_a,_b));
else{
a[_a]=max(a[_a],_b);
for(int j=_b;j<=n;j+=lowbit(j))
tree[j]=max(tree[j],_b);
}
}
return 0;
}