警示后人
查看原帖
警示后人
700106
Xdik楼主2025/7/1 21:03

如果你使用了线段树,添加点的时候不能直接覆盖,应该是取最大值,清空的时候才能直接赋值

正确的:

void change(int x,int k,int p,int s,int t){
	if(s==t){
		tr[p]=max(tr[p],k);return;
	}
	int mid=(s+t)>>1;
	if(mid>=x)change(x,k,p<<1,s,mid);
	else change(x,k,p<<1|1,mid+1,t);
	pushup(p);
}

错误的

void change(int x,int k,int p,int s,int t){
	if(s==t){
		tr[p]=k;return;
	}
	int mid=(s+t)>>1;
	if(mid>=x)change(x,k,p<<1,s,mid);
	else change(x,k,p<<1|1,mid+1,t);
	pushup(p);
}
2025/7/1 21:03
加载中...