#include<bits/stdc++.h>
#define nif -10000000000000000ll
typedef long long ll;
using namespace std;
ll n,m,a[100005];
struct aa{
ll ad,mx;
friend aa operator+(aa a,aa b){return{max(nif,a.ad+b.ad),max(a.mx+b.ad,b.mx)};}
friend aa operator*(aa a,aa b){return{max(a.ad,b.ad),max(a.mx,b.mx)};}
};
struct node{
aa hlz,lz;
ll mx,hmx;
}d[400005];
void bd(ll p,ll l,ll r){
d[p]={{0ll,nif},{0ll,nif},a[l],a[l]};
if(l==r)return;
ll mid=l+r>>1;
bd(p<<1,l,mid);
bd(p<<1|1,mid+1,r);
d[p].mx=max(d[p<<1].mx,d[p<<1|1].mx);
d[p].hmx=max(d[p<<1].hmx,d[p<<1|1].hmx);
return;
}
void make_tag(int p,aa now,aa his) {
d[p].hlz=d[p].hlz*(d[p].lz+his);
d[p].lz=d[p].lz+now;
ll res=max(d[p].mx+his.ad,his.mx);
d[p].hmx=max(d[p].hmx,res);
d[p].mx=max(d[p].mx+now.ad,now.mx);
}
void psd(int p) {
make_tag(p<<1,d[p].lz,d[p].hlz);
make_tag(p<<1|1,d[p].lz,d[p].hlz);
d[p].lz=d[p].hlz={0ll,nif};
}
void upd(int p,int L,int R,int l,int r,ll v,ll mx) {
if(L<=l&&r<=R){make_tag(p,{v,mx},{v,mx});return;}
int mid=(l+r)>>1;
psd(p);
if(L<=mid)upd(p<<1,L,R,l,mid,v,mx);
if(R>mid)upd(p<<1|1,L,R,mid+1,r,v,mx);
d[p].mx=max(d[p<<1].mx,d[p<<1|1].mx);
d[p].hmx=max(d[p<<1].hmx,d[p<<1|1].hmx);
}
ll ask(ll p,ll l,ll r,ll s,ll t,ll v){
if(s==t){
if(v==4)return d[p].mx;
return d[p].hmx;
}else{
ll mid=s+t>>1;
psd(p);
if(r<=mid)return ask(p<<1,l,r,s,mid,v);
if(l>mid)return ask(p<<1|1,l,r,mid+1,t,v);
return max(ask(p<<1,l,mid,s,mid,v),ask(p<<1|1,mid+1,r,mid+1,t,v));
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(nullptr);
cout.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
cin>>m;
bd(1,1,n);
while(m--){
char p;
ll l,r,v;
cin>>p>>l>>r;
if(p=='Q')cout<<ask(1,l,r,1,n,4)<<'\n';
else if(p=='A')cout<<ask(1,l,r,1,n,1)<<'\n';
else if(p=='P'){
cin>>v;
upd(1,l,r,1,n,v,nif);
}else{
cin>>v;
upd(1,l,r,1,n,nif,v);
}
}
return 0;
}
只有1、2A了,其他都T