蒟蒻感觉是线段树修改中出的问题,但没看出来
by WJX3078 @ 2020-10-23 13:53:47
@[邬健翔307816794](/user/109931) %%%WJX大佬
by itisover @ 2020-10-23 14:03:22
%%%,邬健翔dalao
by Farkas_W @ 2020-10-23 14:03:35
@[邬健翔307816794](/user/109931) swap不要用异或,开了O2用异或会更慢(个人感觉
by itisover @ 2020-10-23 14:04:49
@[邬健翔307816794](/user/109931) 为啥l==r的时候要return啊/挠头
by AuCloud @ 2020-10-23 14:06:27
感觉线段树写的看不懂,附上我的线段树
```cpp
void pushdown(int x,int l,int r){
int mid=l+r>>1;
sum[ls]+=lazy[x]*(mid-l+1),sum[rs]+=lazy[x]*(r-mid);
lazy[ls]+=lazy[x],lazy[rs]+=lazy[x];
lazy[x]=0;
}
void update(int x,int l,int r,int xl,int xr,int v){
if(xl<=l&&xr>=r){
sum[x]+=v*(r-l+1);
lazy[x]+=v;
return;
}
pushdown(x,l,r);
int mid=l+r>>1;
if(xl<=mid) update(ls,l,mid,xl,xr,v);
if(xr>mid) update(rs,mid+1,r,xl,xr,v);
sum[x]=sum[ls]+sum[rs];
}
int query(int x,int l,int r,int xl,int xr){
int res=0;
if(xl<=l&&xr>=r){
return sum[x];
}
pushdown(x,l,r);
int mid=l+r>>1;
if(xl<=mid) res+=query(ls,l,mid,xl,xr);
if(xr>mid) res+=query(rs,mid+1,r,xl,xr);
return res;
}
void build(int x,int l,int r){
if(l==r){
sum[x]=a[seq[l]];
return;
}
int mid=l+r>>1;
build(ls,l,mid);
build(rs,mid+1,r);
sum[x]=sum[ls]+sum[rs];
}
```
by itisover @ 2020-10-23 14:10:27
@[邬健翔307816794](/user/109931) 建议按照蓝书上的变量命名,对不起实在看不懂线段树
by itisover @ 2020-10-23 14:25:25
~~change 建议重构~~看了半天看不出来
by zyx10 @ 2020-10-23 14:34:49
~~我在本地格式化改变量改了半天才看懂~~
线段树没写错,你是不是中间操作错了,P3384这个板子我加了个modifyRange函数就过了
by EternalLightning @ 2020-10-23 16:07:02
谢谢各位大佬的回复,之前在忙其他事,所以我没有看到,现在我统一回复一下
by WJX3078 @ 2020-10-23 19:45:04