专栏文章
[NOIP2025] 序列询问
P14638题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mimxnbuz
- 此快照首次捕获于
- 2025/12/01 17:14 3 个月前
- 此快照最后确认于
- 2025/12/01 17:14 3 个月前
这个问题看上去比较双栈模拟,所以一个非常自然的想法是考虑分块。首先将原序列按照 的大小分块,则 只有可能是属于同一块或处在相邻两个块的,分别考虑两种情况:
在同一个块 中:对于每一个块,内部的区间的长度一定不会超过 ,所以仅需要考虑 一侧的贡献,可以想到每次分块使得限制减少一,故可以再对这个块 按照 为大小进行分块,我们把再分块的块称为小块,则有这样的几种情况:
-
与 或 处在同一个小块,不妨考虑 与 处在同一个块的情况,对于 ,此时对于任意的 ,若 ,则 一定在 之中,故只需考虑对于每一个 求出最优的 ,这在块 中对应一段后缀,然后在小块中做个前缀 即可。
-
不与 中的任意一个处在同一个小块,此时相当于没有对于区间长度的限制,对于每一个小块,计算前面的小块中 的 与后面的小块中 的 即可求出跨过该小块的贡献。
处在相邻的块中, 在块 中, 在块 中,不妨统计的结果的 在块 中,在块 是对称的。对于 ,任意在块 的 均满足 ,故对于每一个 ,求出最优的 ,求解 可以单调队列简单维护。然后对块 作个前缀 则可以求出跨过 的结果。
两部分对于每组询问 ,故总复杂度 。
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...