CF1889C2. Doremy's Drying Plan (Hard Version)

发布时间 2023-10-30 10:31:24作者: ydtz

容易想到 dp:设 \(dp_{i,p}\) 表示前 \(i\) 天,强制第 \(i\) 天 dry,并且一共消除了 \(p\) 个区间的答案。

转移时可以考虑枚举前面的决策 \(j\),此时有转移方程:

\[dp_{i,p}=\max(dp_{j,p-w})+1 \]

其中 \(w\) 为满足 \(l\in(j,i],r\in[i,n]\) 的区间 \([l,r]\) 个数。

显然可以考虑套路动态维护随着 \(i\) 的移动,对于每个决策 \(j\)\(w\) 值:考虑每次 \(i\to i+1\),我们都会干掉所有 \(r=i\) 的区间,加入所有 \(l=i+1\) 的区间。而转移时我们从 \(i\) 向前找,每找到一个区间左端点,\(w\) 就自增。而又由于 \(k\le 10\),故我们最多只需要找到 \(10\)\(w\) 不同的决策。不妨开 \(k+1\) 个线段树分别维护对于每个 \(p\) 值,区间 dp 最大值,转移时线段树辅助查询转移即可。可以用 multiset 维护合法区间左端点。

总时间复杂度 \(O(nk\log n)\)

动态维护状态对决策贡献。