rt。
#include<iostream>
#include<map>
using namespace std;
#define int long long
int s[800005],add[800005];
void read(int &x){
int f;char c;
for (f=1,c=getchar();c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
for(x=0;c<='9'&&c>='0';c=getchar()) x=x*10+(c&15);x*=f;
}
void build(int p,int l,int r){
if(l==r){
read(s[p]);
return ;
}
int mid=(l+r)/2;
build(p*2,l,mid);build(p*2+1,mid+1,r);
s[p]=s[p*2]+s[p*2+1];
}
void push_down(int p,int l,int r){
if(l==r)return;
int m=(l+r)/2;
add[p*2]+=add[p];
add[p*2+1]+=add[p];
s[p*2]+=add[p]*(m-l+1);
s[p*2+1]+=add[p]*(r-m);
add[p]=0;
}
void change(int p,int l,int r,int x,int y,int v){
if(l>y&&r<x||l>r)return;
if(l>=x&&r<=y){
s[p]+=(r-l+1)*v;
add[p]+=v;
return;
}
if(l==r)return;
int m=(l+r)/2;
push_down(p,l,r);
change(p*2,l,m,x,y,v);
change(p*2+1,m+1,r,x,y,v);
s[p]=s[p*2]+s[p*2+1];
}
int getsum(int p,int l,int r,int x,int y){
if(l>y||r<x)return 0;
if(l>=x&&r<=y)return s[p];
int m=(l+r)/2;
push_down(p,l,r);
return getsum(p*2,l,m,x,y)+getsum(p*2+1,m+1,r,x,y);
}
int n,N;
signed main(){
cin>>n>>N;
build(1,1,n);
while(N--){
int op;read(op);
if(op==1){
int l,r,v;
read(l),read(r),read(v);
change(1,1,n,l,r,v);
}
if(op==2){
int l,r;
read(l),read(r);
printf("%lld\n",getsum(1,1,n,l,r));
}
}
}```