《CF1889C2 Doremy's Drying Plan (Hard Version)》 解题报告

发布时间 2023-11-01 20:47:15作者: daduoli

考场上不会做。

如果考虑删掉哪些区间实际上不太可做。正难则反,转化贡献,考虑哪些点可以有贡献。

显然一个点如果可能有贡献,那么当且仅当覆盖它的区间 \(\le K\) 个。

于是我们记一个状态 \(f_{i,j}\) 表示前 \(i\) 个点中, \(i\) 是最后一个贡献的点,已经删除了 \(j\) 段区间了。

那么如何转移呢,考虑枚举上一个点 \(q\)

\(t\) 为覆盖着 \(i\) 的区间 , \(tt\) 为同时覆盖 \(i,q\) 的区间。

那么 \(f_{q,j}+1\to f_{i,j+t-tt}\)

显然如果直接枚举 \(q\) 肯定超时的。

考虑一些性质,我们发现可以对 \(tt\) 相同的一些段同时处理,然后用数据结构维护快速查询最大值,那么这题就做完了。

时间复杂度 \(O(nK(K+\log n))\)

要用 \(st\) 表来做到 \(O(1)\) 查询。

启示:

  • 正难则反,如果一种算贡献方法做不了,就转化算贡献方式。