数据结构
two permutation
平衡树维护哈希值
合并
启发式合并
适合只有合并没有拆分的问题
树链剖分
左偏树
fhq_treap合并
满足一颗子树内的所有节点都小于另一颗子树
排布石头
平衡树启发式合并
树上启发式合并
树上的子树问题,比如树上众数问题
全局维护数据结构,可以不好合并,但是只需要单点插入单点删除即可。
CCPC Final 2019 K
对树上每个点维护子树内所有点编号构成的连续段个数
笛卡尔树
满足堆性质的二叉树,中序遍历为原序列,每个点为其子树的最值,常用来处理区间最值相关问题。反映了大小关系的层次结构。
O(n)建树
维护单调栈维护右链,相当于对原序列维护一个单调栈中的所有元素
Special Segments Of Permutation
查询有多少区间,满足端点处的数之和等于区间最大值
区间最大值等于区间端点的lca
可以转化为树上问题,利用树上启发式合并解决,然后因为一共只有两个儿子,然后需要处理出一个儿子的桶,然后dfs另一个儿子,所以我们每次启发式合并,每次继承重儿子的桶,然后暴力搜索轻儿子。
线段树合并
雨天的尾巴
有一颗树,第i次操作将树上路径的每一个点放一个i,最终对每个点求其中出现次数最多的数。显然需要数据结构维护,然后是一个离线问题,并且是一个树上问题,所以我们就可以使用线段树合并解决这个问题了。
线段树优化建图
利用线段树可以把一个区间拆分为log个节点的性质。
- 一个点向一个区间内的所有点连边
- 一个区间内所有点到一个点连边
- 区间内所有点到另一个区间连边,可以利用一个中间点转化为1和2
可持久化
可以处理线性的问题或者树形的问题
回家
n个点m条边的有向图,每条边的权值是2^li,求s到t的最短路输出答案对998244353取模的结果。
只需要用可持久化线段树维护二进制,然后加数可以快速维护,只需要修改log个线段树节点,然后还需要维护一下哈希值,就可以快速查询lcp就可以O(logn)比较两个数的大小。
可持久化并查集
???
离线加强版
假的可持久化,版本之间构成了一个版本树,每个版本由自上而下的操作构成,如果在全局维护可支持栈序撤销的数据结构那么对版本树离线dfs即可。
序列分块
二维数点
强制在线,求一个矩形内的点的权值和,带修改
分块
外侧对x进行排序,然后在块内部对y进行排序。然后查询的时候整块可以进行二分,零散点暴力。然后修改就可以进行