#include<iostream>
#include<cstdio>
using namespace std;
typedef long long ll;
ll n,m,x,y,p,k,a[100005],t[100005*4],la[100005*4];
void pushup(int id){
t[id]=t[id*2]+t[id*2+1];
}
void pushdown(int id,int l,int r){
if(la[id]){
ll mid=(l+r)>>1;
la[id*2]+=la[id];
la[id*2+1]+=la[id];
t[id*2]+=(mid-l+1)*la[id];
t[id*2+1]+=(r-mid)*la[id];
la[id]=0;
}
}
void build(int id,int l,int r){
// la[id]=0;
if(l==r){
t[id]=a[l];
return ;
}
ll mid=(l+r)>>1;
build(id*2,l,mid);
build(id*2+1,mid+1,r);
pushup(id);
}
void inupdate(int id,int l,int r,int x,int y,int v){
if(x<=l&&r<=y){
la[id]+=v;
t[id]+=(r-l+1)*v;
return ;
}
pushdown(id,l,r);
ll mid=(l+r)>>1;
if(x<=mid)
inupdate(id*2,l,mid,x,y,v);
if(y>mid)
inupdate(id*2+1,mid+1,r,x,y,v);
pushup(id);
}
inline int read()
{
int t=0,f=1;
char c=getchar();
while(c>'9'||c<'0')
{
if(c=='-') f=-1;
c=getchar();
}
while(c<='9'&&c>='0')
t=t*10+c-'0',c=getchar();
return t*f;
}
int qsum(int id,int l,int r,int x,int y){
if(x<=l&&y>=r){
return t[id];
}
pushdown(id,l,r);
ll mid=(l+r)>>1;
ll ans=0;
if(x<=mid)
ans+=qsum(id*2,l,mid,x,y);
if(y>mid)
ans+=qsum(id*2+1,mid+1,r,x,y);
// pushup(id);
return ans;
}
int main(){
// freopen("P3372_8.in","r",stdin);
// freopen("1.out","w",stdout);
n=read(),m=read();
for(int i=1;i<=n;i++) a[i]=read();
build(1,1,n);
for(int i=1;i<=m;i++){
p=read();
if(p==1) {
x=read(),y=read(),k=read();
inupdate(1,1,n,x,y,k);
}
if(p==2){
x=read(),y=read();
printf("%lld\n",qsum(1,1,n,x,y));
}
}
}
没看出来错哪,求助