@[caoxuanming](/user/148812) ~~你可以输中量或参解改~~
by KSA_Khinomov @ 2021-08-22 20:04:54
@[caoxuanming](/user/148812)
```cpp
#include<bits/stdc++.h>
#define int long long
#define ctjer_si_ma signed main()
using namespace std;
const int N=1e6;
int sum[4*N],ma[4*N] ,a[4*N],q,n,op,x,y,v,l,r,add[4*N];
void pushdown(int p,int l,int r){
if(add[p]==0)return;
int mid=l+(r-l)/2;
sum[p*2]+=(mid-l+1)*add[p];
add[p*2]+=add[p];
sum[p*2+1]+=(r-mid)*add[p];
add[p*2+1]+=add[p];
add[p]=0;
}
void build(int p,int l,int r){
add[p]=0;
if(l==r){
sum[p]=a[l];
return;
}
int mid=l+(r-l)/2;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
sum[p]=sum[p*2]+sum[p*2+1];
}
void modify(int p,int l,int r,int x,int y,int v){
if(y<l||x>r)return;
if(x<=l&&r<=y){
sum[p]+=(r-l+1)*v;
add[p]+=v;
return;
}
pushdown(p,l,r);
int mid=l+(r-l)/2;
modify(p*2,l,mid,x,y,v);
modify(p*2+1,mid+1,r,x,y,v);
sum[p]=sum[p*2]+sum[p*2+1];
}
int query(int p,int l,int r,int x,int y){
if(r<x||l>y)return 0;
if(x<=l&&r<=y){
return sum[p];
}
pushdown(p,l,r);
int mid=l+(r-l)/2;
return query(p*2,l,mid,x,y)+query(p*2+1,mid+1,r,x,y);
}
ctjer_si_ma{
cin>>n>>q;
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
build(1,1,n);
for(int i=1;i<=q;i++){
scanf("%lld",&op);
if(op==1){
scanf("%lld%lld%lld",&x,&y,&v);
modify(1,1,n,x,y,v);
}else{
scanf("%lld %lld",&l,&r);
printf("%lld\n",query(1,1,n,l,r));
}
}
return 0;
}
```
by KSA_Khinomov @ 2021-08-22 20:07:04
```cpp
#include<bits/stdc++.h>
#define int long long
#define ctjer_si_ma signed main()
using namespace std;
const int N=1e6;
int sum[4*N],ma[4*N] ,a[4*N],q,n,op,x,y,v,l,r,add[4*N];
void pushdown(int p,int l,int r){
if(add[p]==0)return;
int mid=l+(r-l)/2;
sum[p*2]+=(mid-l+1)*add[p];
add[p*2]+=add[p];
sum[p*2+1]+=(r-mid)*add[p];
add[p*2+1]+=add[p];
add[p]=0;
}
void build(int p,int l,int r){
add[p]=0;
if(l==r){
sum[p]=a[l];
return;
}
int mid=l+(r-l)/2;
build(p*2,l,mid);
build(p*2+1,mid+1,r);
sum[p]=sum[p*2]+sum[p*2+1];
}
void modify(int p,int l,int r,int x,int y,int v){
if(y<l||x>r)return;
if(x<=l&&r<=y){
sum[p]+=(r-l+1)*v;
add[p]+=v;
return;
}
pushdown(p,l,r);
int mid=l+(r-l)/2;
modify(p*2,l,mid,x,y,v);
modify(p*2+1,mid+1,r,x,y,v);
sum[p]=sum[p*2]+sum[p*2+1];
}
int query(int p,int l,int r,int x,int y){
if(r<x||l>y)return 0;
if(x<=l&&r<=y){
return sum[p];
}
pushdown(p,l,r);
int mid=l+(r-l)/2;
return query(p*2,l,mid,x,y)+query(p*2+1,mid+1,r,x,y);
}
ctjer_si_ma{
cin>>n>>q;
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
build(1,1,n);
for(int i=1;i<=q;i++){
scanf("%lld",&op);
if(op==1){
scanf("%lld%lld%lld",&x,&y,&v);
modify(1,1,n,x,y,v);
}else{
scanf("%lld %lld",&l,&r);
printf("%lld\n",query(1,1,n,l,r));
}
}
return 0;
}
by wtw841103 @ 2021-08-22 21:12:05
~~这是代码,正确代码~~
by wtw841103 @ 2021-08-22 21:13:08