#include <bits/stdc++.h>
using namespace std;
const int N=1e5+1;
#define mid (l+r>>1)
#define rs u<<1|1
#define ls u<<1
struct node
{
int l,r,lazy,d;bool f;
int pre,ma,maa;
friend node operator + (node a,node b)
{
return {a.l,b.r,0,0,false,0,max(a.ma,b.ma),max(a.maa,b.maa)};
}
}t[N<<2];
void qu(int u){t[u]=t[ls]+t[rs];}
void bu(int u,int l,int r)
{
if(l==r)
{
int x;cin>>x;
t[u]={l,r,0,0,false,0,x,x};
}
else
{
bu(ls,l,mid);
bu(rs,mid+1,r);
qu(u);
}
}
void guu(node &a,int d)
{
if(a.f)a.lazy+=d;
else a.d+=d;
a.pre=max(a.pre,a.d);
a.ma+=d;a.maa=max(a.maa,a.ma);
}
void gu(node &a,int d)
{
a.lazy=d;a.f=true;
a.ma=d;a.maa=max(a.maa,d);
}
void qd(int u)
{
if(t[u].d)
{
guu(t[ls],t[u].pre);
guu(t[rs],t[u].pre);
guu(t[ls],t[u].d-t[u].pre);
guu(t[rs],t[u].d-t[u].pre);
t[u].d=t[u].pre=0;
}
if(t[u].f)
{
gu(t[ls],t[u].lazy);
gu(t[rs],t[u].lazy);
t[u].f=false;
}
}
void ggu(int u,int ll,int rr,int d)
{
int l=t[u].l,r=t[u].r;
if(l>=ll&&r<=rr)guu(t[u],d);
else
{
qd(u);
if(ll<=mid)ggu(ls,ll,rr,d);
if(rr>mid)ggu(rs,ll,rr,d);
qu(u);
}
}
void gg(int u,int ll,int rr,int d)
{
int l=t[u].l,r=t[u].r;
if(l>=ll&&r<=rr)gu(t[u],d);
else
{
qd(u);
if(ll<=mid)gg(ls,ll,rr,d);
if(rr>mid)gg(rs,ll,rr,d);
qu(u);
}
}
int ask_maa(int u,int ll,int rr)
{
int l=t[u].l,r=t[u].r;
if(l>=ll&&r<=rr)return t[u].maa;
else
{
qd(u);qu(u);
if(rr<=mid)return ask_maa(ls,ll,rr);
if(ll>mid)return ask_maa(rs,ll,rr);
return max(ask_maa(ls,ll,rr),ask_maa(rs,ll,rr));
}
}
int ask_ma(int u,int ll,int rr)
{
int l=t[u].l,r=t[u].r;
if(l>=ll&&r<=rr)return t[u].ma;
else
{
qd(u);qu(u);
if(rr<=mid)return ask_ma(ls,ll,rr);
if(ll>mid)return ask_ma(rs,ll,rr);
return max(ask_ma(ls,ll,rr),ask_ma(rs,ll,rr));
}
}
int n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin>>n;bu(1,1,n);cin>>m;
while(m--)
{
char op;
int l,r,d;
cin>>op>>l>>r;
if(op=='Q')cout<<ask_ma(1,l,r)<<"\n";
else if(op=='A')cout<<ask_maa(1,l,r)<<"\n";
else
{
cin>>d;
if(op=='P')ggu(1,l,r,d);
else gg(1,l,r,d);
}
}
return 0;
}