1 条题解
-
0
题意回顾
给定一个 到 的排列 。
对每个区间 ,设长度 ,将区间内数排序后,设 $Y = a_{\lceil X/2 \rceil} + a_{\lceil (X+1)/2 \rceil}$(即两个中间位置的和),权值 。
求所有 个区间的最大权值及达到该权值的区间个数。数据范围:。
关键观察
1. 权值公式分析
设区间长度为 ,排序后数组为 。
- 当 为奇数时,$\lceil L/2 \rceil = \lceil (L+1)/2 \rceil = (L+1)/2$,中位数位置相同,
- 当 为偶数时,,,
所以: $ W = L + \begin{cases} 2 \cdot \text{median} & L \text{ 奇数} \\ \text{两个中间数的和} & L \text{ 偶数} \end{cases} $
2. 寻找最大权值
,其中 是区间中两个中间位置的和。
对于固定长度 ,要最大化 ,需要最大化 ,即选择区间使得排序后的中间两个数尽可能大。
3. 重要性质
由于 是排列,最大可能的 来自整个数组中最大的几个数。
具体来说:
- 对奇数 ,最大 (第 大的数?需要仔细)
- 对偶数 ,最大 (第 大 + 第 大)
实际上,对长度 ,最大可能的 是,最大化中间两个数,应该取尽可能大的数放在中间位置。
4. 精确分析
排序后中间两个位置是 和 。
要最大化它们的和,应该让这两个位置的值尽可能大。对于固定 ,最大可能的 是取数组中最大的 个数,其中 ,然后 等于这 个数中最小的两个数的和。
因为中间位置的值不能大于整个区间中一半的值,所以中间两个数的最大值受限于区间中较大的一半数的最小值。
算法推导
1. 对每个 L 计算最大可能 Y
设整个数组排序后为 (值本身,不是下标)。
对长度 :
- 需要的“大数”个数
- 最大 (第 大 + 第 大)?需要验证。
例子:,排序 :
- , , 中间位置是第2个,排序后第2个数。
更准确:区间排序后第 大的数最大可能是整体第 大的数。
经过推导,对长度 :
- 最大 $Y_{\max}(L) = (n - \lfloor L/2 \rfloor) + (n - \lfloor L/2 \rfloor + 1)$ 当 偶数
- 最大 当 奇数
验证 :
- : ? 不对, 时中间位置是1, 该数,最大是 ,但 ,成立。
- : ,最大区间 确实 。
- : ,最大区间 排序 ,中间是4,。
公式正确。
2. 最大权值计算
所以:
- 偶数:
- 奇数:$W = L + 2(n - \lfloor L/2 \rfloor) = L + 2n - (L-1) = 2n + 1$
发现:对所有 ,
3. 结论验证
检查 样例: 理论上 ,样例输出确实是 。
所以最大权值与区间长度无关,恒为 。
问题转化
现在只需要统计有多少个区间的权值等于 。
即统计满足 的区间个数。
但由前面推导, 等价于区间排序后的中间两个数满足特定条件。
4. 统计区间
权值 要求区间必须包含特定的数。
经过分析,区间权值达到 当且仅当区间包含数 和 ,并且它们处于区间的中间位置。
更精确:
- 区间必须包含
- 在区间排序后, 和 必须是中间的两个数( 偶数)或者是中位数( 奇数时 和 相同?不可能,所以只考虑偶数情况)
实际上, 为奇数时,,要达到 ,需要 ,这只在特定情况发生。
但样例中 ,输出个数是 ,我们验证一下哪些区间权值是 。
最终结论
本题标准结论:
- 最大权值 =
- 达到最大权值的区间必须同时包含 和 ,且区间中大于等于 的数恰好有 个
统计时,可以枚举包含 和 的区间,检查条件。
算法步骤
- 找到 和 的位置 和
- 设 ,
- 区间必须包含 ,设
- 对每个 ,计算满足条件的区间个数:
- 区间包含
- 区间中大于等于 的数恰好有 个
- 统计总个数
复杂度
- 预处理每个位置左边/右边大于等于 的数的个数:
- 统计区间个数:
- 总
总结
本题的关键发现:
- 最大权值恒为 ,与区间长度无关
- 达到最大权值的区间必须包含 和
- 并且这两个数在区间排序后处于中间位置
- 通过位置分析和计数可在 时间内解决
- 1
信息
- ID
- 4541
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 1
- 上传者