寒假到省选的一些笔记

三月

统计

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可以改成枚举前缀写法,预处理后缀的答案降复杂度。

细节

准备单调扫的时候要当心条件到底是不是单调的。

输出优化检查类型匹配。

你可能感兴趣的:(寒假到省选的一些笔记)