一、李超树
- 概念:一种维护平面上若干直线,支持查询覆盖某个点的最高/最低直线的线段树.
- 原理:维护直线(建立在线段树、树链剖分的基础上)
二、左偏树(可并堆)
- 前置知识:
- 外结点:左子树或右子树为空的结点
- 距离:左偏树种一个结点x到它子结点中最近外结点经过的边数,记为dist(x)(若外结点距离为0,空结点(null)的距离为-1)
- 概念:支持O(logn)合并的堆
- 性质:
- 堆性质
- (左偏性质)左偏树中任意结点满足它的左子树的距离大于等于右子树的距离。即
- 左偏树中任意结点的左子树和右子树都是左偏树
- 定义:具有左偏性质的堆有序二叉树
三、线段树合并
- 概念:对于一个结点,若两线段树都有,则直接合并信息,若只有一个有,直接返回即可
- 原理:一般重合部分较小
- 均摊时间复杂度:
四、Splay
- 常用用途:维护可快速提取区间的数列,以及实现LCT
五、fhqTreap
- 概念:分为split和merge两种操作的平衡树
- 原理:在merge方法内利用rand()维护平衡性,split方法可按权值/子树大小进行事务(此时权值小于等于k在左子树中,大于等于k在右子树中)
六、三维偏序问题(特殊)
- 题面:给定三个长度为n的排列A,B,C,你需要统计有多少对(i,j)满足且且。()
- 原理:利用容斥原理特殊化后,正常解题
七、哈希表树状数组(动态开点树状数组)
八、可持久化线段树(主席树)
- 前置知识:
- 权值线段树:记录权值的线段树,a[1~n]需要离散化
- 常用用途:二维数点
- 例题:P3834 【模板】可持久化线段树 1(主席树)
九、动态树(LCT)
- 例题:动态图连通性(最大瓶颈路问题)