专栏文章

题解:P14417 [JOISC 2015] 防壁 / Walls

P14417题解参与者 5已保存评论 4

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
4 条
当前快照
1 份
快照标识符
@mindb44e
此快照首次捕获于
2025/12/02 00:32
3 个月前
此快照最后确认于
2025/12/02 00:32
3 个月前
查看原文
首先,如果 Pi<Pi+1<Pi+2P_i<P_{i+1}<P_{i+2},那么从 iii+2i+2 的过程中一定会经过 i+1i+1,直接删掉 i+1i+1 即可(Pi>Pi+1>Pi+2P_i>P_{i+1}>P_{i+2} 同理)。故接下来我们认为 PiP_i 这个序列是波浪状的。
Li=BiAi+1L_i=B_i-A_i+1
考虑如果 PiPi+1Lj|P_i-P_{i+1}|\geq L_j 恒成立,则对于 Pi<Pi+1P_i<P_{i+1} 一定是从 Pi+Lj1P_i+L_j-1 移动到 Pi+1P_{i+1}(反过来同理),那么所有贡献都是固定的,形如 PiPi+1Lj\sum|P_{i}-P_{i+1}-L_j| ,直接拆开计算即可。
否则,我们考虑 PiPi+1|P_i-P_{i+1}| 最小的一个 ii(不妨认为 Pi<Pi+1P_i<P_{i+1}),那么一定有 Pi1>Pi+1,Pi+2<PiP_{i-1}>P_{i+1},P_{i+2}<P_i,可以发现此时从 Pi1P_{i-1}Pi+2P_{i+2} 的过程中左端点一定会经过 PiP_i,并且因为 PiPi+1<Lj|P_{i}-P_{i+1}|<L_j 故此时就覆盖了 Pi+1P_{i+1},因此这两个点都可以删掉。
当然在边界情况如 i1i-1 或者 i+2i+2 不存在的情况要单独考虑一下,但都是可以删点的。
综上,我们将所有询问区间按照长度从小到大排序,用链表维护剩余的 PP,用 set 维护最小的 PiPi+1|P_i-P_{i+1}| ,每次删掉直到满足 PiPi+1Lj|P_i-P_{i+1}|\geq L_j,此时可以拆开 O(1)O(1) 计算,复杂度 O((N+M)logM)O((N+M)\log M)

评论

4 条评论,欢迎与作者交流。

正在加载评论...