专栏文章
题解:P14231 复读机 / repeat
P14231题解参与者 7已保存评论 10
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @minlozme
- 此快照首次捕获于
- 2025/12/02 04:27 3 个月前
- 此快照最后确认于
- 2025/12/02 04:27 3 个月前
2024 NOIP 联考供题,数据范围略有加强。
题意
给你一个长度为 的序列 。
接下来有 次查询,每次给出一个区间 和 ,你需要在区间中选择一个长为 的子序列,最小化相邻两项的和的最大值。
。
题解
对于一个数 ,取出最长的相邻两项和 的子序列,如果其长度 那么答案就 。
我们把 的数称为「小数」,反之称之为「大数」。小数必定可连选,大数必定不可连选。
最优情况必定为小数全选,对于每相邻两个小数,如果它们之间最小的大数可选就选上。
那么我们按值域从小到大做扫描线,每次会将一些大数切换为小数。注意到相邻的小数之间显然均为大数,所以可以求出若干四元组 表示在 时 为相邻小数且对答案有 的贡献。差分为对 的单点加矩形求和,还需注意 跨过端点时的贡献。
对这些四元组以及询问进行整体二分即可。
时间复杂度 。
继续优化,发现对于一个时刻 ,仍有贡献的四元组 的区间 除端点外互不相交,那么数点可以降一维:只要求 在区间内,此时只会算多包含右端点的一个贡献区间。
前驱后继可以类似地在整体二分中双指针维护。
时间复杂度 。
相关推荐
评论
共 10 条评论,欢迎与作者交流。
正在加载评论...