#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=1e5+10,M=460,inf=-2e9;
int n,m,len=40,t,nc[2*M],sum;
ll read()
{
ll x=0,f=1;char ch=getchar();
while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
return x*f;
}
void write(ll x)
{
if(x<0)
putchar('-'),x=-x;
if(x>9)
write(x/10);
putchar(x%10+'0');
}
struct K{
int l,r,len;
ll b[2*M],sum,lsum,rsum,mx;
}a[2*M];
int get(int &p){
int kp=a[0].r;
while(a[kp].len<p){
p-=a[kp].len;
kp=a[kp].r;
}
p--;
return kp;
}
void update(int p){
ll s=0;
a[p].sum=0;
a[p].lsum=a[p].rsum=a[p].mx=inf;
for(int i=0;i<a[p].len;i++){
s=max(s,s+a[p].b[i]);
a[p].mx=max(a[p].mx,s);
a[p].sum+=a[p].b[i];
a[p].lsum=max(a[p].sum,a[p].lsum);
}
s=0;
for(int i=a[p].len-1;i>=0;i--){
s+=a[p].b[i];
a[p].rsum=max(s,a[p].rsum);
}
}
void build(int p){
int nw=nc[t--];
a[nw].l=p;
a[nw].r=a[p].r;
a[a[p].r].l=nw;
a[p].r=nw;
a[nw].len=0;
}
void del(int p){
nc[++t]=p;
a[a[p].l].r=a[p].r;
a[a[p].r].l=a[p].l;
}
void split(int p){
build(p);
a[a[p].r].len=a[p].len/2;
for(int i=0;i<a[a[p].r].len;i++)
a[a[p].r].b[i]=a[p].b[a[p].len-a[a[p].r].len+i];
a[p].len-=a[a[p].r].len;
update(p);
update(a[p].r);
}
void merge(){
for(int p=a[0].r;a[p].r;p=a[p].r){
if(a[p].len+a[a[p].r].len<2*len){
for(int i=0;i<a[a[p].r].len;i++)
a[p].b[a[p].len+i]=a[a[p].r].b[i];
a[p].len+=a[a[p].r].len;
update(p);
del(a[p].r);
}
}
}
void insert(int p,int x){
int kp;
if(p==sum){
kp=a[0].l;
a[kp].b[a[kp].len++]=x;
update(kp);
if(a[kp].len>len*2)
split(kp);
return;
}
kp=get(p);
for(int i=a[kp].len-1;i>=p;i--)
a[kp].b[i+1]=a[kp].b[i];
a[kp].len++;
a[kp].b[p]=x;
update(kp);
if(a[kp].len>len*2)
split(kp);
}
void remove(int p){
int kp=get(p);
for(int i=p+1;i<a[kp].len;i++)
a[kp].b[i-1]=a[kp].b[i];
a[kp].len--;
if(!a[kp].len)
del(kp);
else
update(kp);
}
void change(int p,int x){
int kp=get(p);
a[kp].b[p]=x;
update(kp);
}
int ask(int l,int r){
int kl=get(l),kr=get(r);
ll ml=inf,mr=inf,mx=inf;
ll lsum=inf,rsum=inf,s=0,sum=0;
if(kl==kr){
for(int i=l;i<=r;i++){
s=max(s+a[kl].b[i],a[kl].b[i]);
mx=max(mx,s);
}
return mx;
}
for(int i=a[kl].len-1;i>=l;i--){
sum+=a[kl].b[i];
lsum=max(lsum,sum);
s=max(s+a[kl].b[i],a[kl].b[i]);
ml=max(ml,s);
}
sum=s=0;
for(int i=0;i<=r;i++){
sum+=a[kr].b[i];
rsum=max(rsum,sum);
s=max(s+a[kr].b[i],a[kr].b[i]);
mr=max(mr,s);
}
mx=max(ml,mr);
lsum=max(lsum,(ll)0);
rsum=max(rsum,(ll)0);
for(int p=a[kl].r;p!=kr;p=a[p].r){
mx=max(mx,a[p].mx);
mx=max(mx,lsum+a[p].lsum);
lsum=max(lsum+a[p].sum,a[p].rsum);
lsum=max(lsum,(ll)0);
}
mx=max(mx,lsum+rsum);
return mx;
}
int main(){
char op;
ll x,y;
t=M*1.5;
for(int i=1;i<=M*1.5;i++)
nc[i]=i;
n=read();
a[0].l=a[0].r=1;
for(int i=1;i<=n;i++){
x=read();
sum++;
insert(i,x);
}
m=read();
for(int i=1;i<=m;i++){
cin>>op;
x=read();
if(op=='I'){
y=read();
sum++;
insert(x,y);
}
if(op=='D'){
sum--;
remove(x);
}
if(op=='R'){
y=read();
change(x,y);
}
if(op=='Q'){
y=read();
write(ask(x,y)),putchar('\n');
}
if(!(i%450))
merge();
}
return 0;
}