专栏文章

题解:P14231 复读机 / repeat

P14231题解参与者 7已保存评论 10

文章操作

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

当前评论
10 条
当前快照
1 份
快照标识符
@minlozme
此快照首次捕获于
2025/12/02 04:27
3 个月前
此快照最后确认于
2025/12/02 04:27
3 个月前
查看原文
2024 NOIP 联考供题,数据范围略有加强。

题意

给你一个长度为 nn 的序列 a1na_{1\dots n}
接下来有 qq 次查询,每次给出一个区间 [l,r][l,r]kk,你需要在区间中选择一个长为 kk 的子序列,最小化相邻两项的和的最大值。
n,q3×105n,q\le 3\times10^5

题解

对于一个数 vv,取出最长的相邻两项和 v\le v 的子序列,如果其长度 k\ge k 那么答案就 v\le v
我们把 2aiv2a_i\le v 的数称为「小数」,反之称之为「大数」。小数必定可连选,大数必定不可连选。
最优情况必定为小数全选,对于每相邻两个小数,如果它们之间最小的大数可选就选上。
那么我们按值域从小到大做扫描线,每次会将一些大数切换为小数。注意到相邻的小数之间显然均为大数,所以可以求出若干四元组 (i,j,l,r)(i,j,l,r) 表示在 v[l,r]v\in [l,r]i,ji,j 为相邻小数且对答案有 11 的贡献。差分为对 vlv\ge l 的单点加矩形求和,还需注意 [i,j][i,j] 跨过端点时的贡献。
对这些四元组以及询问进行整体二分即可。
时间复杂度 O((n+q)log2n)O((n+q)\log^2n)
继续优化,发现对于一个时刻 vv,仍有贡献的四元组 (i,j,l,r),lvr(i,j,l,r),l\le v\le r 的区间 [i,j][i,j] 除端点外互不相交,那么数点可以降一维:只要求 ii 在区间内,此时只会算多包含右端点的一个贡献区间
前驱后继可以类似地在整体二分中双指针维护。
时间复杂度 O((n+q)logn)O((n+q)\log n)

评论

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

正在加载评论...