`||` -> `|`
by InversionShadow @ 2023-10-01 21:02:45
@[ydq1101](/user/672281) 马关且感谢
by zyh0516_lucky @ 2023-10-01 21:04:15
```cpp
#include<bits/stdc++.h>
#pragma G++ optimize(2)
using namespace std;
#define int long long
const int N=100005;
int n,m;
int a[N];
struct tree{
int l,r;
int val;
int DelayMark;
}t[4*N];
int opt,u,v,w;
void Build(int p,int l,int r){
t[p].l=l;
t[p].r=r;
if(l==r){
t[p].val=a[l];
return;
}
int mid=l+r>>1;
Build(p*2,l,mid);
Build(p*2+1,mid+1,r);
t[p].val=t[p*2].val+t[p*2+1].val;
}
void DelayMarkLowering(int p){
if(t[p].DelayMark){
t[p*2].val+=t[p].DelayMark*(t[p*2].r-t[p*2].l+1);
t[p*2+1].val+=t[p].DelayMark*(t[p*2+1].r-t[p*2+1].l+1);
t[p*2].DelayMark+=t[p].DelayMark;
t[p*2+1].DelayMark+=t[p].DelayMark;
t[p].DelayMark=0;
}
}
void Change(int p,int u,int v,int w){
if(u<=t[p].l&&v>=t[p].r){
t[p].val+=w*(t[p].r-t[p].l+1);
t[p].DelayMark+=w;
return;
}
DelayMarkLowering(p);
int mid=t[p].l+t[p].r>>1;
if(u<=mid)
Change(p*2,u,v,w);
if(v>mid)
Change(p*2+1,u,v,w);
t[p].val=t[p*2].val+t[p*2+1].val;
}
int Find(int p,int u,int v){
if(u<=t[p].l&&v>=t[p].r)
return t[p].val;
DelayMarkLowering(p);
int mid=t[p].l+t[p].r>>1,ans=0;
if(u<=mid)
ans+=Find(p*2,u,v);
if(v>mid)
ans+=Find(p*2+1,u,v);
return ans;
}
signed main(){
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i];
Build(1,1,n);
while(m--){
cin>>opt;
if(opt==1){
cin>>u>>v>>w;
Change(1,u,v,w);
}else{
cin>>u>>v;
cout<<Find(1,u,v)<<endl;
}
}
return 0;
}
/*
*/
```
by IndifferentBreeze @ 2023-10-01 21:45:37
@[2022zhangyuanhao](/user/746930)
by IndifferentBreeze @ 2023-10-01 21:47:06
@[IndifferentBreeze](/user/1009384) 同谢且同学
by zyh0516_lucky @ 2023-10-03 08:49:29