样例过了
#include <bits/stdc++.h>
using namespace std;
long long int a[100001],res[100001],bas[100001];
long long int n,m,b;
void change(int l,int r,int x)
{
int dl=l/b,dr=r/b;
if(dl==dr)
{
for(int i=l;i<=r;i++)
{
a[i]+=x;
res[dl]+=x;
}
return;
}
for(int i=l;i<dl*b;i++)
{
a[i]+=x;
res[dl]+=x;
}
for(int i=dl;i<dr;i++)
{
bas[i]+=x;
res[i]+=x*b;
}
for(int i=dr*b;i<=r;i++)
{
a[i]+=x;
res[dr]+=x;
}
}
long long int query(int l,int r)
{
long long int ans=0;
int dl=l/b,dr=r/b;
if(dl==dr)
{
for(int i=l;i<=r;i++)
{
ans+=bas[dl]+a[i];
}
}
else
{
for(int i=l;i<(dl+1)*b;i++)
{
ans+=bas[dl]+a[i];
}
for(int i=dl+1;i<dr;i++)
{
ans+=res[i];
}
for(int i=dr*b;i<=r;i++)
{
ans+=bas[dr]+a[i];
}
}
return ans;
}
int main()
{
scanf("%lld%lld",&n,&m);
b=sqrt(n);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
res[i/b]+=a[i];
}
for(int i=1;i<=m;i++)
{
int f,x,y,k;
scanf("%d",&f);
if(f==1)
{
scanf("%d%d%d",&x,&y,&k);
change(x,y,k);
}
else
{
scanf("%d%d",&x,&y);
printf("%lld\n",query(x,y));
}
}
return 0;
}