专栏文章
题解:P14463 【MX-S10-T4】『FeOI-4』呼吸之野
P14463题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @minbdwv6
- 此快照首次捕获于
- 2025/12/01 23:38 3 个月前
- 此快照最后确认于
- 2025/12/01 23:38 3 个月前
令 为值域。
枚举 ,将 的位置设为 , 的位置设为 。每次将一个位置 。对于每个位置 ,维护 表示使得区间 合法的最大的 。
考虑如果存在 ,那么区间 就包含了区间 。所以在当前时刻,区间 就没有用了。并且当 继续变大时, 还是会包含 。所以可以直接将位置 删掉。
于是我们发现一个右端点会在一个前缀时间存在。那我们考虑扫原序列,维护 的信息。
考虑对于一个 我们如何处理。首先我们需要维护上一个有用的位置。
令当前位置为 ,上一个有用位置为 。考虑如果 ,显然 。所以我们考虑什么时候 。 注意到若 ,那么 。也就是说,若点 对于 不合法,那么 ,即 。我们发现这个区间的长度 。那么我们就可以用一个线段树维护前缀和 和历史最值。然后当位置 变成新的有用的点时清空历史最值。用线段树维护每个 的信息,使用线段树上二分求出最后一个存在时间,可以做到 。
考虑将查询按照 从小到大处理,维护所有没有被删掉的点。然后答案会是一段区间,直接二分求出来即可。时间复杂度 。
考虑用上述做法倒着做一遍,可以得到有用的左端点集合,并且两个集合的点是一一对应的。那么可以直接找到区间。时间复杂度 。
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...