云了还没来得及写的题
P5398 [Ynoi2018] GOSICK
考虑二次离线莫队,先把莫队询问离线下来。
对于 \(([1,i-1],i)\) 的贡献包含 \(1\) 到 \(i-1\) 中 \(a_i\) 的倍数和约数个数,约数直接枚举,倍数的话如果 \(a_i<\sqrt n\) 直接在之前维护出来,否则暴力在桶里面统计一下就行了。
考虑另外一部分 \(([1,ll-1],i)\) 的贡献,在添加每个数的时候维护,以其为倍数的数直接根号枚举其约数即可,以其为约数的数,如果 \(a_i \geq \sqrt n\) ,直接暴力扫一遍它所有的倍数。
关键是考虑小于 \(\sqrt n\) 的数,现在有若干组形如 \([ql,qr]\) 内有多少个 \(a_i\) 的倍数的询问,我们直接维护一个前缀和处理即可。
这题卡常所以用普通数组来代替 \(\text{vector}\) ,调整一下块长就行了。
P4648 [IOI2007] pairs 动物对数
曼哈顿距离转切比雪夫距离
P7883 平面最近点对
平面最近点对模板题
Expensive Strings
广义 \(\text{SAM}\) 模板题
ABC269G - Reversible Cards 2
考虑 \(\sum_{i=1}^n(a_i+b_i) \leq M \leq 2\cdot 10^5\) ,因此不同的 \(a_i-b_i\) 只有 \(\sqrt n\) 种,把相同的合并然后跑 \(\sqrt n\) 次单调队列优化多重背包即可。
P8947 Angels & Demons
建出广义 \(\text{SAM}\) ,每次添加文本串的操作其实就是给树链的并加上 \(1\) ,用 \(\text{dfs}\) 序维护一下即可。
P3715 [BJOI2017]魔法咒语
\(\text{AC}\) 自动机上 \(\text{DP}\) 加上矩阵乘法,复制一棵 \(\text{AC}\) 自动机以限制长度为 \(2\) 的好串。
ABC285F - Substring of Sorted String
对每个字符开一个树状数组维护即可。
CF1777E. Edge Reverse
考虑如果缩完强联通分量之后,只存在一个无入度的点的话,就符合条件。直接二分答案,每次判定就是将边权小于二分值的边加上反向边,跑 \(\text{tarjan}\) 即可,时间复杂度 \(O((n+m) \log w)\) 。
CF1777F. Comfortably Numb
此题直接考虑以每个点为左端点的区间并不好做。由于所求有一个 \(\max\) ,我们可以直接通过枚举区间的最大值来解决。这个可以使用笛卡尔树。注意异或的性质,区间 \([l,r]\) 异或和可以转化成 \(r\) 的前缀异或和异或上 \(l-1\) 的前缀异或和。
因此我们对于笛卡尔树上的每一个节点, 用 \(\text{0-1 Trie}\) 维护这个节点子树内所有点的前缀异或和,向父节点合并更新的时候启发式合并就行了。时间复杂度 \(O(n \log n \log w)\) 。
CF1792F1. Graph Coloring (easy version)
首先这题需要发现一件事情,就是染色成红色/蓝色是等价的,因为你把所有的颜色取反,也是一种合法的方案。
那么我们考虑只对蓝色计数,记 \(B_i\) 表示大小为 \(i\) 的完全图,全图蓝联通的方案数,\(A_i\) 表示总方案数。
考虑转移,我们枚举和 \(1\) 所在同一个蓝联通的点的个数,剩余的点可以蓝联通,也可以红联通,两个点集之间的连边必须全是蓝色。
直接 \(O(n^2)\) 的 \(\text{dp}\) 就可以通过 \(\text{easy version}\) 。
CF1792F2. Graph Coloring (hard version)
\(B\) 的转移方程是一个卷积的形式,我们先画一下式子。
令 \(C_i=\frac{B_i}{(i-1)!},D_i=\frac{B_i}{i!}\) ,我们将其代入转移方程。
分治 \(\text{FFT}\) 解决就行了。
CF1780E. Josuke and Complete Graph
如果小于等于 \(l\) 的 \(a\) 在 \([l,r]\) 的子图中出现,那么等价于:
对于后者由于 \(l \leq 10^9\) 不同的取值只有 \(\sqrt{10^9}\) 种,直接数论分块就可以做了。
CF1780F. Three Chairs
考虑容斥,先让答案是 \(n \choose 3\) ,然后去除掉所有的以 \(a(a>1)\) 为公约数的不合法的方案数,容斥系数是 \(\mu(a)\) 。
CF1780G. Delicious Dessert
\(\text{SAM}\) 板子题,预处理出 \(1-n\) 所有数的约数即可。
CF1790G. Tokens on Graph
只考虑可行的点跑最短路,然后在看某个出发点边上可行点数量,如果有连续两个点在边上就可以走无限次。
ABC286F - Guess The Number 2
直接构造环然后 \(\text{CRT}\) 求解就行。
ABC286G - Unique Walk
将不在 \(S\) 里的边加上缩点判欧拉回路即可。
ABC286Ex - Don't Swim
将起点、终点跟多边形的每一个点放在以其跑凸包,如果两个点都在凸包内,就是两边取个 \(\min\) ,否则就是两点直线距离。
ABC287F - Components
树形 \(\text{dp}\) 。记 \(f_{i,j,0/1}\) 表示以 \(i\) 为根的子树,子树内连通块数量为 \(j\) ,\(i\) 是否在某个连通块内的方案数。
转移如下:
ABC287G - Balance Update Query
线段树上二分板子题。
ABC287Ex - Directed Graph and Query
顺序枚举点,记 \(a_{i,j}\) 表示从 \(i\) 点出发能否到达 \(j\) ,从初始对于每条边 \((u_i,v_i)\) ,有 \(a_{u_i,v_i}=1\) ,然后跑 \(\text{floyd}\) 即可,\(\text{bitset}\) 优化一下即可做到 \(O(\frac{n^3}{64})\) 。