随机链剖分的意义!

· · 休闲·娱乐

考虑我们想用 treap 维护 lct,我们对每个点的儿子建一个 treap,但是是按照它的重链的根的权值建的。

此时,我们发现,这个子 treap 的根就是按照基于重链长度的随机链剖分剖出来的重儿子!

因为此时,我们在这些重链上的最小值是随机的,所以它属于某个儿子的概率是 d_v/ \sum d_v 的。

当然,这个结构实际上可能有点奇怪的问题,你可能需要把权值复制一份,一份在重链的 treap,一份在子树的 treap。

随机链剖分的复杂度本身也有一定问题。

你可以假装这个树的根就是它的右儿子,但是这又会带来一系列正确性问题,所以目前你还没法实际写这个东西。

upd: 一些可能有用的东西

如果我们要求这个 treap lct 几乎满足堆性质,我会一个树高有希望是 log ,但是目前不太会维护的奇异结构。

静态建法就是先拿出这个树权值的最小值当根节点,对于外面拿它的根的链的最小值当左儿子,递归建,对于里面,先拿出每个子树的最小值,然后对这些最小值建个 treap,这个 treap 的根充当右儿子,再继续递归建。

因为一个点既在子树的 treap 中,也在重链的 treap 中,所以它是 4 叉的。

然后这个更对的东西是按照子树大小随机的链剖分,所以它对的希望大很多。

你可能可以考虑我们每次拿最小值当根,就没有外面了,但是这个感觉像是一个点分树,应该做不了 lct,不过可以再发一篇文章 treap 点分树。

其实 ccf 提出随机链剖分是因为 dzd 已经会了 treap lct,但是因为 数据删除 无法将其传授给凡人,只好使用这种方式。

以上内容都是口胡,因为如果验证了就不是休闲娱乐了。