概要:
平衡树大概是最常用的高级数据结构了,而treap用来进行一般的信息维护,splay用来进行高级的信息维护(比如区间操作、lct等)(map、set党自重QAQ)。
技巧及注意:
细节十分多。
在对打tag的数据结构中,要操作的点的祖先一定要把tag都要下放完才行!这点非常重要!
treap中如果设小根堆的话(最好设小根堆),null的重量要设置为inf。
平衡树中的重复元素两种处理方法,看情况使用。
平衡树中的rank和select要和上一种注意事项结合起来,多想想。
splay中如果写lct要特判根。treap很多地方要传指针引用,splay完全不必。写好后最好手造几组hentai的数据(对应着题目的要求来),然后看是不是会re或wa。
数组一定不要开小,能开多大就开多大。
例题:
treap:
- 【BZOJ】3224: Tyvj 1728 普通平衡树(某不科学的oj)
- 【BZOJ】3196: Tyvj 1730 二逼平衡树(区间第k小+树套树)
- 【BZOJ】1146: [CTSC2008]网络管理Network(树链剖分+线段树套平衡树+二分 / dfs序+树状数组+主席树)
- 【BZOJ】1862: [Zjoi2006]GameZ游戏排名系统 & 1056: [HAOI2008]排名系统(treap+非常小心)
splay(模板最好用最新的):
- Splay 伸展树
- 【BZOJ】1507: [NOI2003]Editor(Splay)
- 【BZOJ】1901: Zju2112 Dynamic Rankings(区间第k小+树套树)
- 【BZOJ】1503: [NOI2004]郁闷的出纳员(Splay)
- 【BZOJ】1500: [NOI2005]维修数列(splay+变态题)(维护连续的块)
- 【BZOJ】1014: [JSOI2008]火星人prefix(splay+hash+二分+lcp)(维护lcp)
- 【UOJ】【UR #2】猪猪侠再战括号序列(splay/贪心)(很sb的构造题我写了splay。。而且比赛还没调出来...)
- 【BZOJ】1251: 序列终结者(splay)(null的初值忘记多想想...)
- 【BZOJ】2209: [Jsoi2011]括号序列(splay)(括号序列#1)
- 【BZOJ】2329: [HNOI2011]括号修复(splay+特殊的技巧)(括号序列#2,上面一题的加强版,一定要注意打tag!tag的顺序及相互影响!
然后是lct,看我另一个专题吧。。