文艺平衡Splay树学习笔记(2)
本blog会讲一些简单的Splay的应用,包括但不局限于 1. Splay 维护数组下标,支持区间reserve操作,解决区间问题 2. Splay 的启发式合并(按元素多少合并) 3. 线段树+Splay 大常数树套树 一、Splay维护区间下标解决区间翻转问题 思想: 对于数组的下标是不可重复的,我们使用平衡树维护下标,利用Splay的splay操作,让区间都在一棵子树内。 然后直接输出这颗子树的维护信息,由于维护的是子树信息,那么父亲的信息一定可以由两个儿子推出。 于是就可以类似于线段树的操作了(用儿子信息维护父亲信息)。 [LuoGu 模板] 文艺平衡树 : 维护区间翻转,输出最终区间形态。 Solution : 考虑splay函数的实质,就是把节点x转到目标节点,并且让Splay树保持BST的性质。 那么显然,对于维护序列下标,其维护的值便是元素对于数组的位置。(一个节点左边儿子子树的位置都小于该节点) 对于一个区间进行翻转,那么事实上就是 把l和r下标交换,l+1和r-1下标交换... 那么如何确定这个区间呢,不妨把[l-1]转到根节点,[r+1]转到根节点的右儿子,那么对于根节点右儿子的左儿子所在子树 就可以描述为[l,r]区间。 然而,对于Splay本身来说是不能出现下标为0的情况的,否则会死循环,在(1)中已经讲的非常明确了,所以我们仍然加入一个哨兵节点