先考虑不带修怎么做。容易想到设 表示当前考虑了前 个位置,且第 个位置放了支撑塔,最少所花费的代价是多少。容易想到 转移:枚举上一个设支撑塔的位置 ,转移为 ,其中 需要满足 中不能存在一个必须设立支撑塔的位置,且 。容易想到用单调队列优化,时间复杂度为 。
然后考虑带修。注意到 ,因此想到每次询问可能时间复杂度带一个 。容易发现任意一个长度为 的连续子段中都至少存在一个支撑塔,因此考虑对于每次修改,先提前再处理出 表示当前考虑了 的位置,且第 个位置放了支撑塔,最少所花费的代价是多少。暴力的处理出 区间内的 dp 值,然后直接拼接到 和 两个 dp 数组上,时间复杂度为 可以通过。
喜欢的话,留下你的评论吧~