全WA,下载数据下来看运行也是正确滴
#include <bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x=0,f=0;char ch=getchar();
while(!isdigit(ch))f^=!(ch^45),ch=getchar();
while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return f?-x:x;
}
inline void write(int x){
if(x<0)x=-x,putchar('-');
if(x>=10)write(x/10);
putchar(x%10+'0');
}
inline void writeln(int x){write(x);puts("");}
int n,q,root,idx;
struct{int son[2],fa,siz,val,sum,add;}tr[100005];
int a[100005];
void pushup(int p){
tr[p].sum=tr[tr[p].son[0]].sum+tr[tr[p].son[1]].sum+tr[p].val;
tr[p].siz=tr[tr[p].son[0]].siz+tr[tr[p].son[1]].siz+1;
}
void pushdown(int p){
if(tr[p].add){
tr[tr[p].son[0]].add+=tr[p].add;
tr[tr[p].son[1]].add+=tr[p].add;
tr[tr[p].son[0]].val+=tr[p].add;
tr[tr[p].son[1]].val+=tr[p].add;
tr[tr[p].son[0]].sum+=tr[tr[p].son[0]].siz*tr[p].add;
tr[tr[p].son[1]].sum+=tr[tr[p].son[1]].siz*tr[p].add;
tr[p].add=0;
}
}
void rotate(int x){
pushdown(x);
int y=tr[x].fa,z=tr[y].fa;
int k=tr[y].son[1]==x;
tr[z].son[tr[z].son[1]==y]=x,tr[x].fa=z;
tr[y].son[k]=tr[x].son[k^1],tr[tr[x].son[k^1]].fa=y;
tr[x].son[k^1]=y,tr[y].fa=x;
pushup(y);pushup(x);
}
void splay(int x,int goal){
while(tr[x].fa!=goal){
int y=tr[x].fa,z=tr[y].fa;
if(z!=goal){
if((tr[z].son[1]==y) ^ (tr[y].son[1]==x))rotate(x);
else rotate(y);
}
rotate(x);
}
if(!goal)root=x;
}
int New(int val,int fa){
tr[++idx].val=tr[idx].sum=val;
tr[idx].siz=1;tr[idx].fa=fa;
return idx;
}
void build(int &p,int l,int r,int fa){
if(l>r)return;
int mid=l+r>>1;
p=New(a[mid],fa);
build(tr[p].son[0],l,mid-1,p);
build(tr[p].son[1],mid+1,r,p);
pushup(p);
}
int kth(int k){
int p=root;
while(114514){
pushdown(p);
if(tr[tr[p].son[0]].siz>=k)p=tr[p].son[0];
else if(tr[tr[p].son[0]].siz+1>=k)return p;
else k-=tr[tr[p].son[0]].siz+1,p=tr[p].son[1];
}
}
signed main(){
n=read();q=read();
for(int i=1;i<=n;i++)a[i]=read();
root=New(-0x3f3f3f3f,0);
tr[root].son[1]=New(0x3f3f3f3f,root);
tr[root].siz=2;
build(tr[tr[root].son[1]].son[0],1,n,tr[root].son[1]);
pushup(tr[root].son[1]);pushup(root);
while(q--){
int ch=read();
if(ch==1){
int l=read(),r=read(),c=read();++l;++r;
l=kth(l-1);r=kth(r+1);
splay(l,0);splay(r,l);
tr[tr[r].son[0]].add+=c;
tr[tr[r].son[0]].val+=c;
tr[tr[r].son[0]].sum+=c*tr[tr[r].son[0]].siz;
pushup(r);pushup(l);
}else{
int l=read(),r=read();++l;++r;
l=kth(l-1);r=kth(r+1);
splay(l,0);splay(r,l);
writeln(tr[tr[r].son[0]].sum);
}
}
return 0;
}