namespace IO{
#define LL long long
inline LL read(){
LL x=0,f=1;char c=getchar();
for (;!isdigit(c);c=getchar())if (c=='-')f=-1;
for (;isdigit(c);c=getchar())x=(x<<3)+(x<<1)+(c^48);
return x*f;
}
inline void write(LL x,char c='\n'){
if (x){
if (x<0)x=-x,putchar('-');
char a[30];short l;
for (l=0;x;x/=10)a[l++]=x%10^48;
for (l--;l>=0;l--)putchar(a[l]);
}else putchar('0');putchar(c);
}
}using namespace IO;
using namespace std;
#define lson(x) (t[x].son[0])
#define rson(x) (t[x].son[1])
#define int long long
const int N = 5e5+10;
const int INF = 2e9;
struct Treap{
int son[2],key,siz,val;
int ls,rs,maxn;
int cov,rev,sum;
}t[N];int sta[N],top,n,m,cnt,root;
void Rev(int now){
if (!now)return ;
swap(t[now].ls,t[now].rs);
swap(t[now].son[0],t[now].son[1]);
t[now].rev^=1;
}
void Cov(int now,int cov){
t[now].cov=t[now].val=cov;
t[now].sum=t[now].siz*cov;
t[now].ls=t[now].rs=max(0ll,t[now].sum);
t[now].maxn=max(cov,t[now].sum);
}
void pushup(int now){
t[now].siz=t[lson(now)].siz+t[rson(now)].siz+1;
t[now].sum=t[lson(now)].sum+t[rson(now)].sum+t[now].val;
t[now].ls=max(t[lson(now)].ls,max(0ll,t[lson(now)].sum+t[now].val+t[rson(now)].ls));
t[now].rs=max(t[rson(now)].rs,max(0ll,t[rson(now)].sum+t[now].val+t[lson(now)].rs));
t[now].maxn=max(t[now].val,t[lson(now)].rs+t[now].val+t[rson(now)].ls);
if (lson(now))t[now].maxn=max(t[now].maxn,t[lson(now)].maxn);
if (rson(now))t[now].maxn=max(t[now].maxn,t[rson(now)].maxn);
}
void pushdown(int now){
if (t[now].cov!=INF){
int cov=t[now].cov;
if (lson(now))Cov(lson(now),cov);
if (rson(now))Cov(rson(now),cov);
t[now].cov=INF;
}
if (t[now].rev){
if (lson(now))Rev(lson(now));
if (rson(now))Rev(rson(now));
t[now].rev=0;
}
}
void split(int now,int val,int &x,int &y){
if (!now)return x=y=0,void();
pushdown(now);
if (t[lson(now)].siz<val)
x=now,split(rson(x),val-t[lson(x)].siz-1,rson(x),y),
pushup(x);
else
y=now,split(lson(y),val,x,lson(y)),
pushup(y);
pushup(now);
}
int merge(int x,int y){
if (!x||!y)return x+y;
if (t[x].key<t[y].key){
pushdown(x);
rson(x)=merge(rson(x),y);
pushup(x);
return x;
}
else{
pushdown(y);
lson(y)=merge(x,lson(y));
pushup(y);
return y;
}
}
int init(int val){
int now=(top?sta[top--]:++cnt);
t[now].key=rand();
t[now].cov=INF;
t[now].rev=0;
lson(now)=rson(now)=0;
t[now].maxn=t[now].sum=t[now].val=val;
t[now].ls=t[now].rs=max(0ll,val);
t[now].siz=1;
return now;
}
int build(int l,int r){
if (l==r)return init(read());
int mid=(l+r)>>1;
int t1=build(1,mid);
int t2=build(mid+1,r);
return merge(t1,t2);
}
void Del(int now){
if (lson(now))Del(lson(now));
if (rson(now))Del(rson(now));
sta[++top]=now;
}
void Delete(int l,int r){
int t1,t2,t3;
split(root,r,t1,t2);
split(t1,l-1,t1,t3);
Del(t3);
root=merge(t1,t2);
}
void Cover(int l,int r,int cov){
int t1,t2,t3;
split(root,r,t1,t2);
split(t1,l-1,t1,t3);
Cov(t3,cov);
root=merge(merge(t1,t3),t2);
}
void Reverse(int l,int r){
int t1,t2,t3;
split(root,r,t1,t2);
split(t1,l-1,t1,t3);
Rev(t3);
root=merge(merge(t1,t3),t2);
}
int Query(int l,int r){
int t1,t2,t3;
split(root,r,t1,t2);
split(t1,l-1,t1,t3);
int ret=t[t3].sum;
root=merge(merge(t1,t3),t2);
return ret;
}
int Max(int l,int r){
int t1,t2,t3;
split(root,r,t1,t2);
split(t1,l-1,t1,t3);
int ret=t[t3].maxn;
root=merge(merge(t1,t3),t2);
return ret;
}
signed main(){
n=read(),m=read(),root=build(1,n);
for (int i=1;i<=m;i++){
char s[20];cin>>s;
if (s[0]=='I'){
int x=read(),N=read(),t1,t2;
split(root,x,t1,t2);
root=merge(merge(t1,build(x,x+N-1)),t2);
}
else if (s[0]=='D'){
int x=read(),N=read();
Delete(x,x+N-1);
}
else if (s[0]=='R'){
int x=read(),N=read();
Reverse(x,x+N-1);
}
else if (s[2]=='K'){
int x=read(),N=read(),cov=read();
Cover(x,x+N-1,cov);
}
else if (s[1]=='A'){
int x=read(),N=read();
write(Max(x,x+N-1));
}
else if (strlen(s)>4){
int x=read(),N=read();
write(Query(x,x+N-1));
}
else{
int x=read();
write(Query(x,x));
}
}
return 0;
}
盲猜是代码中的输入有问题QAQ