用 FHQ Treap 的朋友们都知道,这个平衡树是可以合并的。
我们在线段树上找到一个区间,这个区间是由许多小区间组成的,而众所周知,每个小区间对应一棵平衡树,我们把这 logn 个平衡树拼一拼,是 log2n 的,然后再在上面查区间第 k 小,是 logn 的。综上所述,理论而言可以做到 O(log2n)。
那么,这里有两个问题:
- FHQ Treap 的 Merge 函数默认左树最大值小于等于右树最小值,而我们在线段树上找到的一堆区间不保证这个性质,这个怎么解决?
- 你拼完这些树之后还要拆,怎么拆?
发灌水区的原因是因为听灌多,而且气氛也可以不用那么学术。