```cpp
#include<bits/stdc++.h>
#define TAGNONE 10000001
#define maxn 4000010
#define inf 100000001
#define L(node) (tree[node].ch[0])
#define R(node) (tree[node].ch[1])
#define F(node) (tree[node].fa)
#define V(node) (tree[node].val)
#define S(node) (tree[node].size)
#define compare(node,x) (tree[node].val<x)
using namespace std;
int root,cnt,a[maxn],id[maxn];
struct kkk{
int ch[2],size,fa,tag=TAGNONE,val,rev;
int sum,left,right,middle;
}tree[maxn];
void pushup(int node){
kkk &x=tree[L(node)],&y=tree[R(node)];int val=tree[node].val;
kkk &res=tree[node];
res.sum=x.sum+y.sum+val;res.size=x.size+y.size+1;
res.middle=max(max(x.middle,y.middle),x.right+y.left+val);
res.left=max(x.left,x.sum+y.left+val);
res.right=max(y.right,y.sum+x.right+val);
}
void change_val(int node,int val){
if(!node)return ;
tree[node].tag=tree[node].val=val;
tree[node].sum=val*tree[node].size;
tree[node].left=tree[node].right=max(tree[node].sum,0);
tree[node].middle=max(tree[node].sum,val);
}
void change_rev(int node){
if(!node)return ;
swap(tree[node].ch[0],tree[node].ch[1]);
swap(tree[node].left,tree[node].right);
tree[node].rev^=1;
}
void pushdown(int node){
if(tree[node].tag!=TAGNONE){
change_val(L(node),tree[node].tag);
change_val(R(node),tree[node].tag);
tree[node].tag=TAGNONE;
}
if(tree[node].rev){
change_rev(L(node));
change_rev(R(node));
tree[node].rev=0;
}
}
void rotate(int node){
int fa=F(node);
int gfa=F(fa);
int z=tree[fa].ch[1]==node;
tree[gfa].ch[tree[gfa].ch[1]==fa]=node; tree[node].fa=gfa;
tree[fa].ch[z]=tree[node].ch[z^1];tree[tree[node].ch[z^1]].fa=fa;
tree[node].ch[z^1]=fa;tree[fa].fa=node;
pushup(fa); pushup(node);
}
void Splay(int node,int goal){
while(tree[node].fa!=goal){
int fa=F(node);
int gfa=F(fa);
if(gfa!=goal)
(compare(fa,tree[node].val))!=(compare(gfa,tree[fa].val))
?rotate(node)
:rotate(fa);
rotate(node);
}
if(!goal)root=node;
}
void New(int node,int x){
tree[node].middle=tree[node].sum=x;
tree[node].tag=TAGNONE;tree[node].rev=0;
tree[node].left=tree[node].right=max(x,0);
tree[node].size=1;
}
void build(int begin,int end,int fa){ //建树
int mid=(begin+end)>>1;int node=id[mid],pre=id[fa];
if(begin==end){
New(node,a[begin]);
}
if(begin<mid)build(begin,mid-1,mid);
if(mid<end)build(mid+1,end,mid);
tree[node].val=a[mid];tree[node].fa=pre;
pushup(node);
//printf("%d %d\n",node,tree[node].sum);
tree[pre].ch[mid>=fa]=node;
}
int find(int x,int y){
pushdown(x);
int l=L(x),r=R(x);
if(tree[l].size+1==y){return x;}
if(tree[l].size>=y){return find(l,y);}
else{return find(r,y-tree[l].size-1);}
}
int split(int k,int len){
int x=find(root,k),y=find(root,k+len+1);
Splay(x,0);Splay(y,x);
return L(y);
}
void query(int x,int len){
int node=split(x,len);
printf("%d\n",tree[node].sum);
}
void update(int x,int tot,int val){
int node=split(x,tot),y=F(node);
change_val(node,val);
pushup(y);pushup(F(y));
}
void rever(int x,int len){
int node=split(x,len),y=F(node);
if(tree[node].tag==TAGNONE){
change_rev(node);
pushup(y);pushup(F(y));
}
}
void eraser(int x,int len){
int node=split(x,len),y=F(node);
tree[y].ch[0]=0;
pushup(y);pushup(F(y));
}
void insert(int k,int len){
for(int i=1;i<=len;i++)scanf("%d",&a[i]);
for(int i=1;i<=len;i++){
id[i]=++cnt;
}
build(1,len,0);
int z=id[(1+len)>>1];
int x=find(root,k+1),y=find(root,k+2);
Splay(x,0);Splay(y,x);
tree[z].fa=y; tree[y].ch[0]=z;
pushup(y);pushup(x);
}
int main(){
int n,m,x;
scanf("%d%d",&n,&m);
tree[0].middle=a[1]=a[n+2]=-inf;
for(int i=1;i<=n;i++)scanf("%d",&x),a[i+1]=x;
for(int i=0;i<=n+2;i++)id[i]=i;
build(1,n+2,0);
root=(n+3)>>1;cnt=n+2;
for(int i=1;i<=m;i++){
string s;
int x,len,y;
cin>>s;
if(s!="MAX-SUM")scanf("%d%d",&x,&len);
else{
printf("%d\n",tree[root].middle);
}
if(s=="INSERT")insert(x,len);
if(s=="DELETE")eraser(x,len);
if(s=="MAKE-SAME"){
scanf("%d",&y);
update(x,len,y);
}
if(s=="REVERSE")rever(x,len);
if(s=="GET-SUM")query(x,len);
}
}
```
by hyfhaha @ 2019-04-17 13:10:13
自动@[大佬](/space/show?uid=54644)
@[longlongzhu123](/space/show?uid=57525) @[fmj_123](/space/show?uid=73990) @[command_block](/space/show?uid=58705) @[info___tion](/space/show?uid=76049)
by hyfhaha @ 2019-04-17 13:12:33
?
by info___tion @ 2019-04-17 13:15:17
~~写作MLE,读作RE~~
by command_block @ 2019-04-17 13:16:02
自动膜拜@**巨佬**@hyfhaha @[longlongzhu123](/space/show?uid=57525) @[command_block](/space/show?uid=58705)
by wxw25 @ 2019-04-17 13:16:08
~~我又不会splay,@我干什么~~
by fmj_123 @ 2019-04-17 13:17:03
我也不会Splay啊QAQ
by longlongzhu123 @ 2019-04-17 13:17:25
@[command_block](/space/show?uid=58705) 但我试过了,主程序都还没运行就已经MLE了
by hyfhaha @ 2019-04-17 13:19:12
……祝你好运
by command_block @ 2019-04-17 13:22:56
写个垃圾回收啊
by command_block @ 2019-04-17 13:23:48