#include<bits/stdc++.h>
using namespace std;
const int max1=1e5+100;
long long t,n,q1,L[max1/10],R[max1/10],pos[max1];
long long ly[max1],a[max1],sum[max1];
char a1;
void cs()
{
t=sqrt(n*1.0);
int num=n/t;
if(n%t)
{
num++;
}
for(int i=1;i<=num;i++)
{
for(int j=1;j<=t;j++)
{
pos[(i-1)*t+j]=i;
sum[i]+=a[(i-1)*t+j];
}
L[i]=(i-1)*t+1;
R[i]=i*t;
}
R[num]=n;
}
void qjxg(long long l,long long r,long long v)
{
int p=pos[l],q=pos[r];
if(p==q)
{
for(int i=l;i<=r;i++)
{
a[i]+=v;
sum[p]+=v;
}
}
else
{
for(int i=p+1;i<=q-1;i++)
{
ly[i]+=v;
}
for(int i=l;i<=R[p];i++)
{
a[i]+=v;
sum[p]+=v;
}
for(int i=L[q];i<=r;i++)
{
a[i]+=v;
sum[q]+=v;
}
}
}
long long xw(long long l,long long r)
{
long long p=pos[l],q=pos[r];
long long s=0;
if(p==q)
{
for(int i=l;i<=r;i++)
{
s+=a[i];
}
s+=ly[p]*(r-l+1);
}
else
{
for(int i=p+1;i<=q-1;i++)
{
s+=ly[i]*(R[i]-L[i]+1)+sum[i];
}
for(int i=l;i<=R[p];i++)
{
s+=a[i];
}
s+=ly[p]*(R[p]-l+1);
for(int i=L[q];i<=r;i++)
{
s+=a[i];
}
s+=ly[q]*(r-L[q]+1);
}
return s;
}
int main()
{
scanf("%d%d",&n,&q1);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
}
cs();
for(int i=1;i<=q1;i++)
{
cin>>a1;
if(a1=='1')
{
int b1,b2,b3;
scanf("%d%d%d",&b1,&b2,&b3);
qjxg(b1,b2,b3);
}
if(a1=='2')
{
int b1,b2;
scanf("%d%d",&b1,&b2);
printf("%lld\n",xw(b1,b2));
}
}
return 0;
}
最后三个点错了