WA # 1 2 3 4 9 10,只有A询问出错
#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=4e5+5;
long long a[N];
int ls[N],rs[N];
int tot,rt;
long long mx[N];
long long hm[N];
long long to[N],ad[N],th[N],ah[N];
void up(int u){
mx[u]=max(mx[ls[u]],mx[rs[u]]);
hm[u]=max(hm[ls[u]],hm[rs[u]]);
}
void build(int s,int t,int &u){
if(!u) u=++tot;
if(s==t){
hm[u]=mx[u]=a[s];return;
}
int mid=s+t>>1;
build(s,mid,ls[u]);
build(mid+1,t,rs[u]);
up(u);
}
void pushdown(int u,int s,int t){
if(ah[u]>-1e18){
hm[ls[u]]=max(hm[ls[u]],mx[ls[u]]+ah[u]);
hm[rs[u]]=max(hm[rs[u]],mx[rs[u]]+ah[u]);
ah[ls[u]]=max(ah[u]+ad[ls[u]],ah[ls[u]]);
ah[rs[u]]=max(ah[u]+ad[rs[u]],ah[rs[u]]);
// ah[u]=-2e18;
ah[u]=0;
}
if(ad[u]){
mx[ls[u]]+=ad[u];
mx[rs[u]]+=ad[u];
ad[ls[u]]+=ad[u];
ad[rs[u]]+=ad[u];
ad[u]=0;
}
if(to[u]>-1e18){
mx[ls[u]]=mx[rs[u]]=to[u];
to[ls[u]]=to[rs[u]]=to[u];
to[u]=-2e18;
}
if(th[u]>-1e18){
hm[ls[u]]=max(th[u],hm[ls[u]]);
hm[rs[u]]=max(th[u],hm[rs[u]]);
th[ls[u]]=max(th[ls[u]],th[u]);
th[rs[u]]=max(th[rs[u]],th[u]);
th[u]=-2e18;
}
}
long long query(int l,int r,int s,int t,int u,char op){
if(l<=s&&t<=r){
if(op=='Q') return mx[u];
else return hm[u];
}
pushdown(u,s,t);
long long res=-1e18;
int mid=s+t>>1;
if(l<=mid) res=max(res,query(l,r,s,mid,ls[u],op));
if(r>mid) res=max(res,query(l,r,mid+1,t,rs[u],op));
up(u);
return res;
}
void add(int l,int r,int s,int t,int u,long long val,char op){
if(l<=s&&t<=r){
if(op=='P'){//++
if(to[u]>-1e18){
to[u]+=val;
}
else{
ad[u]+=val;
ah[u]=max(ah[u],ad[u]);
}
mx[u]+=val;
hm[u]=max(hm[u],mx[u]);
th[u]=max(th[u],to[u]);
}
else{//赋值
to[u]=val;
mx[u]=val;
hm[u]=max(hm[u],mx[u]);
th[u]=max(th[u],to[u]);
}
return;
}
pushdown(u,s,t);
int mid=s+t>>1;
if(l<=mid) add(l,r,s,mid,ls[u],val,op);
if(r>mid) add(l,r,mid+1,t,rs[u],val,op);
up(u);
}
int main(){
// freopen("t.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
build(1,n,rt);
for(int i=0;i<=4e5;i++){
to[i]=-2e18;
th[i]=-2e18;
// ah[i]=-2e18;
}
cin>>m;
for(int i=1;i<=m;i++){
char op;int x,y,z;cin>>op>>x>>y;
if(op=='Q'||op=='A'){
// cout<<op;
cout<<query(x,y,1,n,rt,op);
cout<<'\n';
}
else{
cin>>z;
add(x,y,1,n,rt,z,op);
}
}
return 0;
}