CF1603D Artistic Partition题解

\(\texttt{Problem Link}\)

题解

看到这个 \(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)\),无法通过。

对于这种 1D1DDP 问题,考虑发掘价值函数的性质。
先推一手式子:

\[\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)\)

posted @ 2024-10-10 08:12  yaoyanfeng  阅读(4)  评论(0)    收藏  举报