警示后人
查看原帖
警示后人
645342
XuanXuan16888楼主2025/7/30 12:24

在合并函数中一定要在合并子节点后pushuppushup

//这是我的merge函数
inline void merge(int x,int y){ //把y合并到x
	if (nodes[x].l && nodes[x].r){
		merge(nodes[x].l,nodes[y].l);
		merge(nodes[x].r,nodes[y].r);
		pushup(x);//因为这一行我调了半天
	}else{
		if (!nodes[x].l && !nodes[x].r && !nodes[y].l && !nodes[y].r){
			nodes[x].w += nodes[y].w;
			return;
		}
		if (!nodes[x].l) nodes[x].l = nodes[y].l;
		else if (nodes[y].l) merge(nodes[x].l,nodes[y].l);
		if (!nodes[x].r) nodes[x].r = nodes[y].r;
		else if (nodes[y].r) merge(nodes[x].r,nodes[y].r);
		pushup(x);
	}
}
2025/7/30 12:24
加载中...