#include<bits/stdc++.h>
#define N 100001
#define ll long long
using namespace std;
int n,T;
ll sum[N<<2],a[N],lzy[N<<2];
void build(int pos,int l,int r)
{
if(l==r)
{
sum[pos]=a[l];
return;
}
int mid=l+r>>1;
build(pos<<1 ,l ,mid);
build(pos<<1|1,mid+1,r );
}
void Add(int pos,int l,int r,int ad)
{
lzy[pos]+=(ll)ad;
sum[pos]+=(ll)(ad*(r-l+1));
}
void pd(int pos,int l,int r)
{
int mid=l+r>>1;
if(!lzy[pos])return;
Add(pos<<1 ,l ,mid,lzy[pos]);
Add(pos<<1|1,mid, r,lzy[pos]);
lzy[pos]=0;
}
void modify(int pos,int l,int r,int ql,int qr,int ad)
{
if(l>=ql&&r<=qr)
{
Add(pos,l,r,ad);
return;
}
int mid=l+r>>1;
pd(pos,l,r);
if(ql<=mid) modify(pos<<1 ,l ,mid,ql,qr,ad);
if(qr>=mid+1)modify(pos<<1|1,mid+1,r ,ql,qr,ad);
sum[pos]=sum[pos<<1]+sum[pos<<1|1];
}
ll query(int pos,int l,int r,int ql,int qr)
{
if(l>=ql&&r<=qr) return sum[pos];
int mid=l+r>>1;
ll res=0;
pd(pos,l,r);
if(ql<=mid) res+=query(pos<<1 ,l ,mid,ql,qr);
if(qr>=mid+1)res+=query(pos<<1|1,mid+1,r ,ql,qr);
return res;
}
int main()
{
short opt;
int l,r,k,i;
cin>>n>>T;
for(i=1; i<=n; i++)
cin>>a[i];
build(1,1,n);
while(T--)
{
cin>>opt>>l>>r;
if(opt&1)
{
cin>>k;
modify(1,1,n,l,r,k);
}
else printf("%lld\n",query(1,1,n,l,r));
}
}
全WA,样例过了