WOERDESUGX @ 2022-11-22 19:24:06
#include<bits/stdc++.h>
using namespace std;
struct node{
int l,r,la;
long long ans;
node() { l=r=ans=la=0; }
}a[154514];
long long Nt[154514];
int l,r,j,op,n,m;
inline void update(int k) {
a[k].ans=a[k*2].ans+a[k*2+1].ans;
}
void build(int k,int l,int r)
{
a[k].l=l;
a[k].r=r;
if(l==r) {
a[k].ans=Nt[l];
return ;
}
int mid=(l+r)/2;
build(k*2,l,mid);
build(k*2+1,mid+1,r);
update(k);
}
void qj(int k,int l,int r,int x)
{
if(a[k].l==l&&a[k].r==r) {
a[k].ans+=(r-l+1)*x;
a[k].la+=x;
return ;
}
int mid=(a[k].l+a[k].r)>>1;
if(r<=mid) qj(k*2,l,r,x);
else if(l>mid) qj(k*2+1,l,r,x);
else qj(k*2,l,mid,x),qj(k*2+1,mid+1,r,x);
update(k);
}
void pushdown(int k)
{
if(a[k].l==a[k].r) { a[k].la=0;return ; }
a[k*2].ans+=(a[k*2].r-a[k*2].l+1)*a[k].la;
a[k*2+1].ans+=(a[k*2+1].r-a[k*2+1].l+1)*a[k].la;
a[k*2].la+=a[k].la;
a[k*2+1].la+=a[k].la;
a[k].la=0;
}
long long query(int k,int l,int r)
{
if(a[k].la) pushdown(k);
if(a[k].l==l&&a[k].r==r) return a[k].ans;
int mid=(a[k].l+a[k].r)>>1;
if(r<=mid) return query(k*2,l,r);
else if(l>mid) return query(k*2+1,l,r);
else return query(k*2,l,mid)+query(k*2+1,mid+1,r);
}
inline long long read()
{
long long x=0;int f=1;char c=getchar();
while(c<'0'||c>'9') {
if(c=='-') f=-1;
c=getchar();
}
while(c>='0'&&c<='9') {
x=x*10+c-48;
c=getchar();
}
return x*f;
}
int main()
{
n=read();m=read();
for(int i=1;i<=n;++i) Nt[i]=read();
build(1,1,n);
while(m--) {
op=read(),l=read(),r=read();
if(op==1) {
j=read();
qj(1,l,r,j);
}
else if(op==2) printf("%lld\n",query(1,l,r));
}
return 0;
}
by Trump__Biden @ 2022-11-23 12:35:11
%%%