Treap
参考资料
简介
Treap(Tree + Heap)给每个节点附一个随机优先级,使其按键值满足二叉搜索树性质、按优先级满足堆性质。随机优先级让期望树高为 ,从而支持 的插入、删除、排名、前驱后继等操作。
竞赛中常用 无旋 Treap(FHQ Treap):只用 split(按键或按大小分裂)与 merge(合并两棵相对有序的树)两个操作即可实现全部功能,代码简短,且天然支持可持久化与区间翻转。
例题
你需要写一种数据结构,来维护一些数,并且提供以下操作:
- 插入一个数 。
- 删除一个数 (若有多个相同的数,应只删除一个)。
- 定义排名为比当前数小的数的个数 。查询 的排名。
- 查询数据结构中排名为 的数。
- 求 的前驱(前驱定义为小于 ,且最大的数)。
- 求 的后继(后继定义为大于 ,且最小的数)。