第九次

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})$。

posted @ 2023-07-31 14:32  5k_sync_closer  阅读(1)  评论(0编辑  收藏  举报  来源