P9180 [COCI2022-2023#5] Slastičarnica
\(\text{solution}\)
首先我们考虑设状态 \(f_{i, j, k}\) 表示到了 \([i, j]\) 这个区间是否可以用到 \(k\) 这个操作,不难发现转移是平凡的,你甚至可以用各种数据结构,用 ST 表做到 \(O(n^3)\)。、
但是发现距离 \(O(n^2)\) 还很遥远,状态的转移已经无法再次优化了,这个时候我们就要仔细思考状态的一些特质了。
我们发现,如果删掉的前缀过短行,那么删掉的前缀过长就更行了,这是一个很优美的性质!意味着我们 dp 数组中有若干个连续段都是 \(1\),我们可以记录这些 \(1\) 最后出现的位置,我们记 \(f_{i, j}\) 表示到第 \(i\) 次操作,左端点为 \(j\),右端点最远能为多少,如果无法转移就输出。
还有一点,\(q \le 2 \times 10^5\) 明显是假的,我们可以对 \(n\) 取 \(\min\)。

浙公网安备 33010602011771号