#include<iostream>
#include<cstdio>
#include<cstdlib>//wym's third xianduanshu
#define maxn 950000
#define ls (num<<1)
#define rs (num<<1|1)
using namespace std;
long long a[maxn],tree[maxn],size[maxn],lazy[maxn];
void build (long long num,long long l,long long r)
{
size[num]=(r-l+1);
if (l==r)
{
tree[num]=a[l];
return ;
}
long long mid=(l+r)>>1;
build (ls,l,mid);
build (rs,mid+1,r);
tree[num]=tree[ls]+tree[rs];
}
void down (long long num)
{
tree[ls]+=lazy[num]*size[ls];
tree[rs]+=lazy[num]*size[rs];
lazy[ls]+=lazy[num],lazy[rs]+=lazy[num];
lazy[num]=0;
}
void update(long long num,long long l,long long r,long long x,long long y,long long z)
{
if (l!=r) down(num);
if (x<=l&&r<=y)
{
tree[num]+=z*size[num];
lazy[num]+=z;
return ;
}
long long mid=(l+r)>>1;
if (x<=mid) update(ls,l,mid,x,y,z);
if (y>mid) update(rs,mid+1,r,x,y,z);
tree[num]=tree[ls]+tree[rs];
}
long long query(long long num,long long l,long long r,long long x,long long y)
{
if (l!=r) down(num);
if (x<=l&&r<=y) return tree[num];
long long mid=(l+r)>>1;
long long res=0;
if (x<=mid) res+=query(ls,l,mid,x,y);
if (y>mid) res+=query(rs,mid+1,r,x,y);
tree[num]=tree[ls]+tree[rs];
return res;
}
int main()
{
long long n,m;
scanf ("%lld",&n);
for (long long i=1;i<=n;++i)
scanf ("%lld",&a[i]);
build (1,1,n);
scanf ("%lld",&m);
for (long long i=1;i<=m;++i)
{
long long b,x,y,z;
scanf ("%lld",&b);
if (b==1)
{
scanf ("%lld%lld%lld",&x,&y,&z);
update(1,1,n,x,y,z);
}
else
{
scanf ("%lld%lld",&x,&y);
printf("%lld\n",query(1,1,n,x,y));
}
}
return 0;
}
这次一小时死于只输入一个lld
大概不是智商问题而是视力问题
绝望