fish_love_cat @ 2023-07-13 10:33:15
明明照着书打的,但是全RE/kk
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn=1e5+10;
ll n,m,a[maxn],w[maxn<<2],lazy[maxn<<2];//w=区间和
void pushup(int u){
w[u]=w[u<<1]+w[(u<<1)+1];
}
void build(int u,int l,int r){
if(l==r){
w[u]=a[l];
}else{
int mid=(l+r)>>1;
build(u<<1,l,mid);
build((u<<1)+1,mid+1,r);
pushup(u);
}
}
ll query0(int u,int l,int r,int x){
if(l==r) return w[u];
int mid=(l+r)>>1;
if(mid>=x) return query0(u<<1,l,mid,x);
return query0((u<<1)+1,1+mid,r,x);
}
void update0(int u,int l,int r,int p,ll x){
if(l==r){
w[u]=x;
return;
}
int mid=(l+r)>>1;
if(mid>=p) update0(u<<1,l,mid,p,x);
else update0(1+(u<<1),mid+1,r,p,x);
pushup(u);
}
bool inrg(int l,int r,int l2,int r2){
return (l2<=l)&&(r<=r2);
}
bool outrg(int l,int r,int l2,int r2){
return (l>r2)||(r<l2);
}
void mktag(int u,int l,ll x){
lazy[u]+=x;
w[u]+=l*x;
}
void pushdown(int u,int l,int r){
int mid=(l+r)>>1;
mktag(u<<1,mid-l+1,lazy[u]);
mktag((u<<1)+1,r-mid,lazy[u]);
lazy[u]=0;
}
ll query(int u,int l,int r,int l2,int r2){
if(inrg(l,r,l2,r2)) return w[u];
if(!outrg(l,r,l2,r2)){
int mid=(l+r)>>1;
pushdown(u,l,r);
return query(u<<1,l,mid,l2,r2)+query((u<<1)+1,mid+1,r,l2,r2);
}
return 0;
}
void update(int u,int l,int r,int l2,int r2,ll x){
if(inrg(l,r,l2,r2)) mktag(u,r-l+1,x);
if(!outrg(l,r,l2,r2)){
int mid=(l+r)>>1;
pushdown(u,l,r);
update(u<<1,l,mid,l2,r2,x);update((u<<1)+1,mid+1,r,l2,r2,x);
pushup(u);
}
}
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i];
}
build(1,1,n);
for(int i=1;i<=m;i++){
int op,x,y,k;
cin>>op>>x>>y;
if(op==1) cin>>k,update(1,1,n,x,y,k);
else cout<<query(1,1,n,x,y)<<endl;
}
return 0;
}
实在查不出来……
by Hua_Liang @ 2023-07-13 14:18:32
@fish_love_cat 本蒟蒻就问一句,被脏了是什么意思?@fish_love_cat
by fish_love_cat @ 2023-07-13 14:24:10
@Hua_Liang 有人公开赛搬题,他是团长,连坐惩罚和 ran 喵一起寄了
by fish_love_cat @ 2023-07-13 14:24:58
@Stitch0711 嗯,nsdd,我这就去逝世()
by Hua_Liang @ 2023-07-13 14:31:54
为大佬叹息中