专栏文章
题解:P11678 [USACO25JAN] Watering the Plants P
P11678题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mipksk2x
- 此快照首次捕获于
- 2025/12/03 13:37 3 个月前
- 此快照最后确认于
- 2025/12/03 13:37 3 个月前
P11678 Watering the Plants P
前言
这道题我做了四天,是一道很有难度的题。标记打错+少判情况
题意
有 个水池,每次可以花费 的代价让第 和第 个水池的水量加 。求最小代价使第 个水池中至少有 的水量。
思路
因为 只能花 或 的贡献加水量,所以 和 的使用次数和不能小于 。
设 为前 个水池已经锁定且满足条件,第 个水池目前有 水量的最小代价。可得转移方程:
现在如何从 快速转移到 就是要解决的问题了。
考虑 slope trick。
-
可以发现,若 是下凸的, 也是下凸的。
-
证明:观察转移方程可以发现其实就是求了个后缀 ,然后再加上一个一次函数。也就是把 每一对相邻点的斜率加上 ,因此还是下凸。
由于边界原因, 时, 不满足下凸性质(具体的可以看楼顶的题解)。那么就可以先预处理出 ,然后再继续做。
接下来,设 为 的最小值的位置,然后分两种情况讨论:
-
时,因为 之后的斜率单调不下降,因此 ;当 时,。
-
时,因为 之前的斜率单调下降,因此 为后缀的最小值,得 。
第一种情况可以看成把 中的 这一段提取出来翻转后拼到 的前缀上,后面的推平成斜率为零 的直线。最后全局斜率加上 。
第二种情况可以看成全局重置为一条斜率为 的直线,即全局推平然后全局斜率加上 。
那如何维护斜率呢?考虑使用平衡树(FHQ Treap)。
维护三个操作:
-
区间翻转并区间取反(因为反转后斜率 会变成 )。
-
区间推平为 。
-
全局加 。
操作 可以参考文艺平衡树,在平衡树树上打标记,操作时下传标记。这个标记记为 ,表示翻转并取反该子树。
操作 ,标记 表示子树内的值全部清零。注意若打上了该标记,其他的 ,该位的值以及子树和都要清 。
操作 只需在根节点打上加的标记 ,之后是一样的。
注意先下传顺序是操作 ,操作 ,操作 。原因是 标记时会把其他清零,若先下传另外两个会出问题;操作 是最后做的,只有下一次的下传可以影响,因此要在最后下传。
具体见代码。
AC Code
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...