CF1603D Artistic Partition题解
题解
看到这个 \(c(l,r)\) 函数,一眼看上去没什么思路,考虑发掘一些性质。
- \(c(l,r) \ge r-l+1\)
- 当 \(r<2\cdot l\) 时,\(c(l,r)\) 取到最小值。
于是可以给出如下构造:\(0,1,3,7,15,\cdots\) 可使答案取到最小值,于是 \(k\) 的范围缩小到了 \(\Theta(\log n)\)。
考虑 DP,设 \(f_{i,j}\) 表示前 \(i\) 个数分成了 \(j\) 段时的答案,转移显然:\(f_{i,j}=\min_{k<i}f_{j-1,k}+c(k+1,i)\)。
但是复杂度是 \(\Theta(n^2\log n)\),无法通过。
对于这种 1D1D 的 DP 问题,考虑发掘价值函数的性质。
先推一手式子:
\[\begin{aligned}
c(l,r) & = \sum_{l\le i\le j\le r} [\gcd(i,j) \ge l]\\
& = \sum_{l\le d\le r}\sum_{1\le i\le \lfloor \frac{r}{d}\rfloor }\varphi(i)\\
& = \sum_{l\le d\le r}sphi(\lfloor\frac{r}{d}\rfloor)
\end{aligned}
\]
其中 \(sphi\) 表示 \(\varphi\) 函数的前缀和,注意到这个价值函数满足四边形不等式,于是有决策单调性,直接分治求即可。
接下来只剩一个问题了,就是如何求 \(c\) 函数?这里可以使用类似莫队的移动指针的方法,依次移动左右端点,复杂度均摊 \(\Theta(\log n)\)。
时间复杂度 \(\Theta(n\log^3 n)\)。

浙公网安备 33010602011771号