关于区间修改有个疑问
查看原帖
关于区间修改有个疑问
600834
Skadiiiii楼主2024/10/31 21:13

代码如下
这样会RE,因为会不停进入modify函数,导致id一直倍增
而取消注释后就不会RE了,这个蒟蒻可以理解

不过普通线段树的板子里区间修改不是不需要注释掉的这部分的吗?mid应该肯定是属于[1,n]的啊?而这里mid会取到0,蒟蒻十分不解,求解答

void modify(int id,int x,int y,int v)
{
//	if(X[tr[id].r+1]<=x||y<=X[tr[id].l])return;
	if(x<=X[tr[id].l]&&X[tr[id].r+1]<=y)
	{
		tr[id].sum+=v;
		if(tr[id].l==tr[id].r)tr[id].len=(tr[id].sum?1:0)*(X[tr[id].r+1]-X[tr[id].l]);
		else pushup(id);
		return;
	}
	int mid=(tr[id].l+tr[id].r)>>1;
	if(x<=X[mid+1])modify(id<<1,x,y,v);
	if(X[mid+1]<y)modify(id<<1|1,x,y,v);
	pushup(id);
}
2024/10/31 21:13
加载中...