#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,m;
int a[N],sum[4*N],lazy[4*N];
void build(int index,int l,int r){
if(l==r){
sum[index]=a[l];
return;
}
int mid=(l+r)>>1;
build(index*2,l,mid);
build(index*2+1,mid+1,r);
sum[index]=sum[index*2]+sum[index*2+1];
}
void range_update(int index,int l,int r,int x,int y,int k){
if(x<=l and r<=y){
sum[index]+=(r-l+1)*k;
lazy[index]+=k;
return;
}
int mid=(l+r)>>1;
if(mid>=x)range_update(index*2,l,mid,x,y,k);
if(mid+1<=y)range_update(index*2+1,mid+1,r,x,y,k);
sum[index]=sum[index*2]+sum[index*2+1];
}
int range_query(int index,int l,int r,int x,int y){
if(x<=l and r<=y)return sum[index];
int mid=(l+r)>>1;
if(lazy[index]){
range_update(index*2,l,mid,1,n,lazy[index]);
range_update(index*2+1,mid+1,r,1,n,lazy[index]);
lazy[index]=0;
}
int ans=0;
if(mid>=x)ans+=range_query(index*2,l,mid,x,y);
if(mid+1<=y)ans+=range_query(index*2+1,mid+1,r,x,y);
return ans;
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
build(1,1,n);
for(int i=0;i<m;i++){
int op,x,y,k;
cin>>op>>x>>y;
if(op==1){
cin>>k;
range_update(1,1,n,x,y,k);
}
else{
cout<<range_query(1,1,n,x,y)<<endl;
}
}
}
只有10pts,除了第一个测试点全部WA