随机链剖分的意义!
考虑我们想用 treap 维护 lct,我们对每个点的儿子建一个 treap,但是是按照它的重链的根的权值建的。
此时,我们发现,这个子 treap 的根就是按照基于重链长度的随机链剖分剖出来的重儿子!
因为此时,我们在这些重链上的最小值是随机的,所以它属于某个儿子的概率是
当然,这个结构实际上可能有点奇怪的问题,你可能需要把权值复制一份,一份在重链的 treap,一份在子树的 treap。
随机链剖分的复杂度本身也有一定问题。
你可以假装这个树的根就是它的右儿子,但是这又会带来一系列正确性问题,所以目前你还没法实际写这个东西。
upd: 一些可能有用的东西
如果我们要求这个 treap lct 几乎满足堆性质,我会一个树高有希望是 log ,但是目前不太会维护的奇异结构。
静态建法就是先拿出这个树权值的最小值当根节点,对于外面拿它的根的链的最小值当左儿子,递归建,对于里面,先拿出每个子树的最小值,然后对这些最小值建个 treap,这个 treap 的根充当右儿子,再继续递归建。
因为一个点既在子树的 treap 中,也在重链的 treap 中,所以它是 4 叉的。
然后这个更对的东西是按照子树大小随机的链剖分,所以它对的希望大很多。
你可能可以考虑我们每次拿最小值当根,就没有外面了,但是这个感觉像是一个点分树,应该做不了 lct,不过可以再发一篇文章 treap 点分树。
其实 ccf 提出随机链剖分是因为 dzd 已经会了 treap lct,但是因为 数据删除 无法将其传授给凡人,只好使用这种方式。
以上内容都是口胡,因为如果验证了就不是休闲娱乐了。