CF1603D Artistic Partition
好的我们 \(O(n \sqrt n \log^2 n)\) 通过此题,常数极小无比。
首先我们分析一下 \(c(l, r)\),考察其怎么求:
\[c(l, r) = \sum_{d = l}^{r}\sum_{i = 1}^{\frac{r}{d}} \sum_{j = i}^{\frac{r}{d}}[gcd(i, j) = 1]
\]
相当于直接枚举 \(gcd\) 了,根据欧拉不知道什么定理,得到后面那一坨上界相同,则有:
\[c(l, r) = \sum_{d = l}^r \sum_{i = 1}^{\frac{r}{d}} \varphi(i)
\]
显然 \(\varphi\) 的前缀和可以快速求,那么该问题可以用整除分块做到 \(\sqrt n\),也许有更优的处理办法,不过这已经够了。
我们设 \(f_{i, j}\) 状态,打出每层转移点发现有决策单调性,然后现在可以做到 \(O(nk\sqrt n \log n)\)。
看起来无法优化了,怎么办!仔细发现随着 \(k\) 增大那么 \(f_{n, k}\) 是不断减小的,最小减小到 \(n\),我们不妨考虑最小划分使其能到 \(n\) 这样我们后面的 \(k\) 就都不用处理了,倍增分块一下,即 \(1, 2, 4, ...\),那么这样每个块都无法凑出一个倍数,通过这么简单的构造我们就得到了 \(n\),由于单调性,所以 \(k \ge \log n\) 的情况下答案都为 \(n\),那么你就在理论 \(> O(n^2)\) 的复杂度下通过了此题。
实际上你在决策单调性过程中写个答案到 \(n\) 就跳出的过程也是对的,而且不需要发现这么多杂七杂八的东西。

浙公网安备 33010602011771号