#include <bits/stdc++.h>
using namespace std;
const int N=1e5+1;
#define rs u<<1|1
#define ls u<<1
struct node
{
int l,r,lazy,d;
bool f;int ma,maa;
friend node operator + (node a,node b)
{
return {a.l,b.r,0,0,false,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,x,x};
}
else
{
int mid=l+r>>1;
bu(ls,l,mid);
bu(rs,mid+1,r);
qu(u);
}
}
void gu(int u,int d)
{
t[u].f=true;
t[u].ma=d;t[u].lazy=d;
t[u].maa=max(t[u].maa,d);
}
void guu(int u,int d)
{
t[u].ma+=d;
if(t[u].f)t[u].lazy+=d;
else t[u].d+=d;
t[u].maa=max(t[u].maa,t[u].ma);
}
void qd(int u)
{
if(t[u].d)
{
guu(ls,t[u].d);
guu(rs,t[u].d);
t[u].d=0;
}
if(t[u].f)
{
t[u].f=false;
gu(ls,t[u].lazy);
gu(rs,t[u].lazy);
}
}
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(u,d);
else
{
int mid=l+r>>1;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(u,d);
else
{
int mid=l+r>>1;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
{
int mid=l+r>>1;qd(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
{
int mid=l+r>>1;qd(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;
}