第九次
A
枚举点权最大值,每次更新所有点对的答案。
问题变为动态加点,维护全源最短路,直接灾后重建。
B
考虑 $a_{i,j}\le 2k$,$\sum a_{i,j}\ge k$ 时怎么做。
若 $\sum a_{i,j}\le 2k$,直接有解。
若 $\sum a_{i,j}>2k$,拿出它上边一行:
- 若这行总和 $<k$,删去这行后 $\sum a_{i,j}>k$,继续处理这个矩阵。
- 若这行总和 $\ge k$ 且 $\le 2k$,直接有解。
- 若这行总和 $>2k$,继续处理这一行。
问题变为找到一个子矩阵,使得 $a_{i,j}\le 2k$,$\sum a_{i,j}\ge k$。
直接单调栈 / 悬线法找 $a_{i,j}\le 2k$ 的极大子矩阵即可。
C
$\varphi(x)=x\prod\dfrac{p_i-1}{p_i}$,所以求 $\varphi(\prod a_i)$ 只需要知道 $\prod a_i$ 和 $\{p_i\in\mathbf P|p_i|\prod a_i\}$。
区间乘积平凡,$300$ 内只有 $62$ 个质数,所以状压质因子即可。
D
根号分治。
步长大于 $B$,暴力跳,复杂度 $O(\dfrac{n^2\log n}B)$。
步长小于等于 $B$,预处理 $f_{i,j}$ 表示 $i$ 往根跳,步长为 $j$ 时停留的点权和,查询时用 $f$ 差分一下即可,
则 $f_{i,j}=f_{k,j}+a_i$,其中 $k$ 是 $i$ 的 $j$ 级祖先,DFS 时用栈维护点到根的链,容易找出 $k$,复杂度 $O(nB)$。
(upd:直接递推复杂度也是这个……用不着栈)
取 $B=\sqrt{n\log n}$,总复杂度 $O(n\sqrt{n\log n})$。