如果你WA 0pts
查看原帖
如果你WA 0pts
810153
Stars154356楼主2024/10/26 08:18
void spilt(int u,int x,int &L,int &R){
	if(u==0){L=R=0;return;}
	
	if(tree[tree[u].ls].size+1<=x){
		down(u);L=u;spilt(tree[u].rs,x-1-tree[tree[u].ls].size,tree[u].rs,R);
	}else{
		down(u);R=u;spilt(tree[u].ls,x,L,tree[u].ls);
	}
	update(u);
}

spilt中down函数不能放在里面,应该放在外面

void spilt(int u,int x,int &L,int &R){
	if(u==0){L=R=0;return;}
	down(u);
	if(tree[tree[u].ls].size+1<=x){
		L=u;spilt(tree[u].rs,x-1-tree[tree[u].ls].size,tree[u].rs,R);
	}else{
		R=u;spilt(tree[u].ls,x,L,tree[u].ls);
	}
	update(u);
}

因为这里有区间翻转,左右节点可能互换

2024/10/26 08:18
加载中...