数据结构
基础
- 栈,队列,并查集,数组,链表, S T ST ST表,哈希表
- 分块:
- 莫队:
- 线段树:
- 权值线段树:
- 动态开点线段树:当初始序列为空或者答案的统计与初始序列无关时可使用动态开点,每一次修改最多加入logn个点,如此在数据范围较大时可实现 O ( k l o g n ) O(klogn) O(klogn)的复杂度
- 李超树:
- 线段树合并:
- 树状数组:
- 单调队列:
* 队首是最优值,放入一个元素时将队尾比当前元素劣的元素出队
* 先进先失效,后进后失效(与队列性质有关 F I F O FIFO FIFO)
* 越劣的元素失效越快 - 单调栈:
* 栈顶是最优值,放入一个元素时将栈顶比当前元素优的元素出栈
* 先进后失效,后进先失效(与栈的性质有关 F I L O FILO FILO)
* 约优的元素失效越快 - S p l a y Splay Splay:
- L C T LCT LCT:
- 可并堆左偏树:
- 虚树:
嵌套
- 总述:外层数据结构的每个节点都用一个内层数据结构处理
- 线段树套线段树
- 线段树套平衡树
- 树状数组套主席树
- 替罪羊树套主席树
可持久化
- 主席树:
- 可持久化字典树:
- 可持久化平衡树:
动态规划
设计
- 设计状态:由少到多以能够描述问题,由多到少简化状态
- 设计转移:
- 类型
* 线性 d p dp dp
* 树形 d p dp dp
* 数位 d p dp dp
* 状压 d p dp dp
* 背包
* d p dp dp套 d p dp dp
* 插头 d p dp dp
* 计数类 d p ( 容 斥 d p ) dp(容斥dp) dp(容斥dp):设计好状态,一般将状态设为不小于或不大于某个值 i i i的方案数更容易处理。转移时从上一层的 i 和 i − 1 ( 或 i + 1 ) i和i-1(或i+1) i和i−1(或i+1)两个状态转移而来即可。对于恰好等于一类问题,按照以上方法设置状态后利用容斥原理更容易设计 d p dp dp
优化
- 数据结构:常常作为斜率优化,决策单调性等优化方法的辅助
- 斜率优化:可应用单调队列,线段树,平衡树等多种数据结构维护最优斜率
- 决策单调性:
* 打表确定性质
* 单调栈(单调队列)+二分维护决策空间
* 比较简单的直接用单调队列即可维护
* 更普适的做法是整体二分维护决策空间 - wqs二分:
- 单调队列使用要求:
* 决策空间的上下界变化具有的单调性
* v a l ( i , j ) val(i,j) val(i,j)中的每一项仅与 i i i和 j j j中的一个有关
决策单调性使用要求:
* 最优决策点具有单调性
* v a l ( i , j ) val(i,j) val(i,j)中的每一项不需要仅与 i i i和 j j j中的一个有关
图论
基础
- 最短路
- D A G DAG DAG
- T a r j a n Tarjan Tarjan,点双,边双,强连通分量, e − D C C e-DCC e−DCC, v − D C C v-DCC v−DCC
- 欧拉回路,哈密尔顿环
- 差分约束
- 2 − S A T 2-SAT 2−SAT
- 各种生成树
网络流
算法
- D i n i c Dinic Dinic
- E K EK EK费用流
模型
- 最大权闭合图:按照最小割分集合模型设计理解
- 最小割可行边,必须边
- 最大密度子图
- 分数规划
- 二分图
* 01染色法
* 最小点覆盖
* 最大独立集
* 最小路径点覆盖
* 可行边,必须边 - 上下界网络流
* 无源汇上下界可行流
* 有源汇上下界可行流
* 有源汇上下界最大,最小流
* 有源汇上下界最小费用可行流 - 性质
* 最小点覆盖=最大独立集
* 最大匹配=最大流=最小割
* 二分图中最小点覆盖=最大匹配
* 常用:二分图中 最大独立集=最小点覆盖=最大匹配=最大流=最小割 - 最小割分集合模型:将所有元素分为两集合并获得最大收益
* 可将最大化收益转化为最小化代价:先将所有收益都选取,即每个元素向两个集合 ( S 和 T ) (S和T) (S和T)都连边,求出最小割并去除这些收益,便可将所有元素划分到两个集合中,并且损失的代价是最小的。 - 小技巧:
* 点边转化
* 最小割模型中设置正无穷容量边防割断 - 切糕模型
数学
数论
- 欧拉定理,费马小定理,欧拉定理的推论
- g c d , e x g c d gcd,exgcd gcd,exgcd
- C R T , e x C R T CRT,exCRT CRT,exCRT
- B S G S , e x B S G S BSGS,exBSGS BSGS,exBSGS
- 逆元
- 原根(用于 N T T NTT NTT)
- 反演
组合数学
- L u c a s , e x L u c a s Lucas,exLucas Lucas,exLucas
- 群论计数
线性代数
- 矩阵加速
- 高斯消元
- F F T , N T T FFT,NTT FFT,NTT
概率期望
- 期望的线性性
- 贝叶斯公式以及推论
计算几何
- 表示方法
- 凸包
- 半平面交
- 旋转卡壳
字符串
- S A SA SA
- K M P KMP KMP
- h a s h hash hash
- T i r e Tire Tire
- A C AC AC自动机
- 串的最小表示法
- M a n a c h e r Manacher Manacher
- 后缀自动机
- 回文自动机
搜索
- D F S DFS DFS
- B F S BFS BFS
- A ∗ A^* A∗
- I D A ∗ IDA^* IDA∗
- 折半搜索
- 启发式搜索
分治
- 整体二分
- C D Q CDQ CDQ分治
- 点分治
- 边分治
- 树链剖分(链分治)