求助,关于平衡树合并的复杂度
  • 板块学术版
  • 楼主Nangu
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/5/31 06:28
  • 上次更新2024/5/31 15:16:29
查看原帖
求助,关于平衡树合并的复杂度
532745
Nangu楼主2024/5/31 06:28
int merge(int x, int y){
	if(!x || !y) return x+y;
	if(d[x]>d[y]) swap(x, y);
	int l, r;
	spt(y, val[x], l, r);//分裂
	son[x][0]=merge(son[x][0], l), son[x][1]=merge(son[x][1], r);
	push_up(x);
	return x;
}

大致思路:设树根为 xx,另一颗树树根为 yy ,满足 dx<dyd_x<d_y,然后将 yy 按 valxval_x 分裂,分别到 xx 的左右子树再进行合并。,保证任意两个数的 valval 都不相同,dd 数组是随机数。平均时间复杂度应该为 O(log⁡2n)O(\log^2 n),可最坏时间复杂度应该为多少?窝太菜了,不会证。。。

2024/5/31 06:28
加载中...