三月
统计
Treap并:分裂时,遇到相等键值要随机一侧,只走某一侧会退化。
树上莫队记得处理LCA附近的问题。
维护颜色出现次数 $k$ 大的分块做法:把每个颜色出现 $1$~最大可能次数的点都表达出来排个序,转成出现/不出现的问题。
DP
大小相关排列计数转笛卡尔树
和前缀、后缀有关,可能可以从两边同时往中间做。
有时一次枚举位置可以记进动态规划状态内变成在此前有/无,减一方。
概率期望
随机图上游走问题:走自环可能优。
无限随机过程的动态规划:
- 可能只有相对差值对转移有影响,压位表示,做DP套DP.
- 取出任何一处都是等价的。
- 无限量级中可以忽略有限量。
- 状态可以表示成马尔可夫链,求解稳定概率的时候可能需要加入方程 $\sum_{u \in V}p_u=1$.
数学
2D下凸函数从任意一个截面看都是下凸的。
2D下凸函数在某维的最小值还是下凸的。
高维情况下DFT和沃尔什变换类似。
Bluestein算法:拆 $nk=\frac{n^2+k^2-(n-k)^2}2$, 卷积求任意长度DFT.
动态加 $1$ 的 $k$ 次幂和转下降幂。
$\sum_{t=0}^{\infty}p_tt^2x^t=x\frac{\mathrm d}{\mathrm dx}(\sum_{t=0}^{\infty}p_ttx^t)=x\frac{\mathrm d}{\mathrm dx}(xP'(x))$
几何
凸多边形的一条边的下标不一定连续,有可能分居头尾。
直接按照辐角排序相加,闵可夫斯基和可能有平角。
判定简单多边形给出点的顺序是正还是负方向:求有向面积。
曲边梯形法算奇怪图形的面积,往 $y$ 轴作垂线段更自然一点。
字符串
字符集比较小的时候,可以考虑用后缀树/后缀自动机代替后缀数组。
有上广义SAM的冲动的时候还可以想一想有没有AC自动机做法。
有 $x$ 个特例点需要动态修改的LCP可以用普通后缀数组,并分段处理,时间 $O(x)$.
图论
当心孤立点!
流
排列转匹配
细节
DAG的深搜记得判有没有访问过。
有重边时点标号和边标号不能一一对应。
NTT记得检查外头枚举长度有没把 i*=2
打成 ++i
计算卷积 $f \gets f * g$ 的时候,$g$ 被破坏。
分治FFT的后几项的内存被破坏。
警惕全局变量移动进局部变量时的初始化问题。
线性时间拉格朗日插值注意分母符号。
后缀数组注意检查:rank[sa[i]]=m-1
以上都不是
进位问题可以直接从和的角度考虑。
直路超车,调换顺序的次数是逆序对数而不是 $O(n)$.
生日攻击法:值域大小为 $n$ 的随机串很可能在 $O(\sqrt n)$ 项内出现两项相等的情况。
四月
数论
powerful number 筛法:构造的简单函数需要求的点值也较少。
图论
求 $u$ 为根 $v$ 所在的子树,处理 $u, v$ 无祖先后代关系的情况。
距离的三角形不等式要三边都判。
树的任意点集直径都可以用增量法求。注意:有可能新点到两个端点的距离都比直径大,这样枚举两个端点分别判断更新就会出问题。
欧拉公式只对连通图成立。
字符串
后缀数组查询 min height[l:r] 求的是 LCP(S[l:], S[r:]), 如果倍增,右界是闭的。
统计
对多个子问题分别CDQ分治,要跳过空问题,不然会无限递归。
两条树链交的统计一般可以分LCA是否为同一点讨论,然后用启发式合并处理。
括号序列可以放上线段树:考虑一个括号区间去掉匹配括号后剩下的部分,前有多少个右括号,后有多少个左括号。
可持久化Treap可能会爆内存。可以考虑算一个上界开内存池,每个位置都打一个“是否有用”的标记,每次分配下一个没用的。快达到上界时重算标记,从头开始分配。
做数据结构,尤其是与两数间隔有关的,一定先想想 $n=1, 2$ 之类的情况,写完再查查。
计数
取模计数最后的贡献对象在指数上,计算要模 $\varphi(P)$.
组合
操作序列问题:考虑逆向分析卡掉非法的操作。
几何
扫描线过程中,只有同一扫描线上的事物有全序,不能对所有事物事先排序。
五月
统计
$N$ 以内 $p^c$ 只有 $O(N/\log N)$ 种,所以和分解式相关的统计题,可以枚举 $\sqrt N$ 内的素数幂批量处理,余下 $>\sqrt N$ 的素因子至多一次方,另外处理。
区间k小直接在主席树的差上二分。
数学
xor基离线支持删除:维护每一项的删除时间,如果当前插入的项的删除时间比当前所枚举项迟,就把插入项和枚举项的信息交换。
设 $P(t)$ 是 $k$ 次多项式,$n$ 是大整数。求 $P^n \mod t^x$ 可以对 $P^{n+1}$ 求导算两次做到 $O(xk+x\log n)$.
组合数转幂变成积性函数方便求和。
图论
在图上做有限制的最短路可以考虑转网络流。
最短路重赋权后权值可能会爆 int.
搜索
DLX每次要找1最少的列。
组合计数
注意森林拓扑序计数配合容斥(FGO)的应用。
六月
计数
从 $a^{n-i}$ 中提出 $a^n$ 要注意 $a \ne 0$.
算多项式积(的前几项):试试取对数。
字符串
Trie上序列自动机:没有新建节点也要修改最后出现的信息。
AC自动机:接受串的子树也是接受的。
AC自动机处理字符串的“同构”时不能直接判相等。
AC自动机的一个节点匹配成功能够贡献其整个fail链。
回文树中,一个节点如果作为多个前缀的最长回文后缀出现,要算多次。
统计
分块右边界可能会有空标记下传,块数要适当开大。
主席树开的点数是 $(\lceil\log_2 V\rceil+1)n$ ,$V$ 是 $n$ 的好几倍时内存池要检查是否开足量。
点分树的高度上限是 $\left\lfloor\log_2 n\right\rfloor\color{red}{+1}$.
动态规划
斜率优化可以一边加点一边扫描,遇到当前决策被弹出的情况直接把决策改到新加的上面。
前缀和优化的时候,改定义可能行不通,只能对着原定义前缀和。
DDP改大参数容易,改小参数难。解决办法:线段树分治,只留下改大。
变上界数位DP可以改成枚举前缀写法,预处理后缀的答案降复杂度。
细节
准备单调扫的时候要当心条件到底是不是单调的。
输出优化检查类型匹配。