1 条题解
-
0
自动搬运
来自洛谷,原作者为

tybbs
春江潮水连海平,海上明月共潮生。搬运于
2025-08-24 23:11:51,当前版本为作者最后更新于2025-04-08 14:16:29,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
参考了 链接 中 的题解。
本题解的复杂度分析中认为 同阶。
考虑暴力怎么做。
对于值 ,设其在 中出现了 次。对于一个区间集合 ,设 表示可以覆盖 中所有区间的点的个数的最小值。 可以通过一个简单的贪心求得:将所有区间按 排序,然后贪心的在 处加入点即可。从大到小枚举值域,从小到大枚举区间编号 ,如果 ,那么把 赋为 ,将 加入 ,然后把区间 删除。暴力复杂度为 。尝试优化上述暴力。注意到我们求 的贪心事实上可以求出第 个点可能的最大值。同理,从大到小按 排序也可以求出其最小值,不妨分别设为 和 。所以 当且仅当存在 使得 与 相交。对于每个值,先二分出其可以覆盖的最长前缀,然后逐个检查每个区间是否可以加入 ,加入后重构 和 。因为每个区间只会造成一次重构,可以得到一个 的做法。
发现第一部分的二分可以通过先进行倍增来优化。先找到最小的 使得覆盖的前缀的长度小于 ,然后在 内二分。这样因为二分的区间长度和删去的区间长度同阶,第一部分的复杂度均摊 。可以通过提前对长为 的前缀排序做到 。
对于第二部分,注意到插入区间的过程中 单增, 单减,且 不会超过 ,而 只有 个合法位置( 同理),所以 和 的变化量是 级别的。只需要在每次插入区间时找到对应的 和 然后暴力更新直到某个位置 或 不再发生变化。
现在的复杂度瓶颈在于对于每个值 ,找到编号最小的 使得其和某一个 相交。一个暴力的想法是对于每个 维护编号最小的与其相交的 。但是存在一个问题:一个区间 可以包含很多个 ,那么在 被使用后需要更新很多个 对应的编号,所以复杂度是假的。考虑优化,注意到若存在 被 包含,那么 一定会被加入。在处理满足上述条件的 后,每个 只会对至多两个 有贡献,所以复杂度正确。这时求最小编号可以用线段树维护( 与 相交当且仅当 或 在 内)。注意更新每次 后需要加入新的包含其的 。
综上,复杂度可以做到 。
代码,偷懒写的 。
- 1
信息
- ID
- 11747
- 时间
- 3000ms
- 内存
- 1024MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者