1 条题解

  • 0
    @ 2025-10-28 21:37:31

    题意回顾

    给定一个 11nn 的排列 aa
    对每个区间 [l,r][l,r],设长度 X=rl+1X = r-l+1,将区间内数排序后,设 $Y = a_{\lceil X/2 \rceil} + a_{\lceil (X+1)/2 \rceil}$(即两个中间位置的和),权值 W=X+YW = X + Y
    求所有 n(n+1)2\frac{n(n+1)}{2} 个区间的最大权值及达到该权值的区间个数。

    数据范围:n106n \leq 10^6


    关键观察

    1. 权值公式分析

    设区间长度为 LL,排序后数组为 b1b2bLb_1 \leq b_2 \leq \dots \leq b_L

    • LL 为奇数时,$\lceil L/2 \rceil = \lceil (L+1)/2 \rceil = (L+1)/2$,中位数位置相同,Y=2b(L+1)/2Y = 2 \cdot b_{(L+1)/2}
    • LL 为偶数时,L/2=L/2\lceil L/2 \rceil = L/2(L+1)/2=L/2+1\lceil (L+1)/2 \rceil = L/2+1Y=bL/2+bL/2+1Y = b_{L/2} + b_{L/2+1}

    所以: $ W = L + \begin{cases} 2 \cdot \text{median} & L \text{ 奇数} \\ \text{两个中间数的和} & L \text{ 偶数} \end{cases} $


    2. 寻找最大权值

    W=L+YW = L + Y,其中 YY 是区间中两个中间位置的和。

    对于固定长度 LL,要最大化 WW,需要最大化 YY,即选择区间使得排序后的中间两个数尽可能大。


    3. 重要性质

    由于 aa 是排列,最大可能的 YY 来自整个数组中最大的几个数。

    具体来说:

    • 对奇数 LL,最大 Y=2×Y = 2 \times(第 (nL12)(n - \frac{L-1}{2}) 大的数?需要仔细)
    • 对偶数 LL,最大 Y=Y =(第 (nL2+1)(n - \frac{L}{2} + 1) 大 + 第 (nL2)(n - \frac{L}{2}) 大)

    实际上,对长度 LL,最大可能的 YY 是,最大化中间两个数,应该取尽可能大的数放在中间位置。


    4. 精确分析

    排序后中间两个位置是 L/2\lceil L/2 \rceil(L+1)/2\lceil (L+1)/2 \rceil
    要最大化它们的和,应该让这两个位置的值尽可能大。

    对于固定 LL,最大可能的 YY 是取数组中最大的 mm 个数,其中 m=(L+1)/2m = \lceil (L+1)/2 \rceil,然后 YY 等于这 mm 个数中最小的两个数的和。

    因为中间位置的值不能大于整个区间中一半的值,所以中间两个数的最大值受限于区间中较大的一半数的最小值。


    算法推导

    1. 对每个 L 计算最大可能 Y

    设整个数组排序后为 1,2,,n1,2,\dots,n(值本身,不是下标)。

    对长度 LL

    • 需要的“大数”个数 m=(L+1)/2m = \lceil (L+1)/2 \rceil
    • 最大 Y=Y =(第 nm+1n-m+1 大 + 第 nm+2n-m+2 大)?需要验证。

    例子:n=5n=5,排序 [1,2,3,4,5][1,2,3,4,5]

    • L=3L=3, m=2m=2, 中间位置是第2个,Y=2×Y=2\times排序后第2个数。

    更准确:区间排序后第 L/2\lceil L/2 \rceil 大的数最大可能是整体第 nL/2n - \lfloor L/2 \rfloor 大的数。

    经过推导,对长度 LL

    • 最大 $Y_{\max}(L) = (n - \lfloor L/2 \rfloor) + (n - \lfloor L/2 \rfloor + 1)$ 当 LL 偶数
    • 最大 Ymax(L)=2×(nL/2)Y_{\max}(L) = 2 \times (n - \lfloor L/2 \rfloor)LL 奇数

    验证 n=5n=5

    • L=1L=1: Y=2×(50)=10Y=2\times (5-0)=10? 不对,L=1L=1 时中间位置是1,Y=2×Y=2\times 该数,最大是 2×5=102\times 5=10,但 n1/2=5n - \lfloor 1/2 \rfloor = 5,成立。
    • L=2L=2: Y=(51)+(51+1)=4+5=9Y=(5-1)+(5-1+1)=4+5=9,最大区间 [4,5][4,5] 确实 Y=4+5=9Y=4+5=9
    • L=3L=3: Y=2×(51)=8Y=2\times (5-1)=8,最大区间 [3,4,5][3,4,5] 排序 [3,4,5][3,4,5],中间是4,Y=8Y=8

    公式正确。


    2. 最大权值计算

    Wmax(L)=L+Ymax(L)W_{\max}(L) = L + Y_{\max}(L)

    所以:

    • LL 偶数:W=L+(2nL+1)=2n+1W = L + (2n - L + 1) = 2n + 1
    • LL 奇数:$W = L + 2(n - \lfloor L/2 \rfloor) = L + 2n - (L-1) = 2n + 1$

    发现:对所有 LLWmax(L)=2n+1W_{\max}(L) = 2n + 1


    3. 结论验证

    检查 n=5n=5 样例: 理论上 Wmax=2×5+1=11W_{\max} = 2\times 5 + 1 = 11,样例输出确实是 1111

    所以最大权值与区间长度无关,恒为 2n+12n+1


    问题转化

    现在只需要统计有多少个区间的权值等于 2n+12n+1

    即统计满足 Y=2n+1LY = 2n+1 - L 的区间个数。

    但由前面推导,Y=2n+1LY = 2n+1 - L 等价于区间排序后的中间两个数满足特定条件。


    4. 统计区间

    权值 2n+12n+1 要求区间必须包含特定的数。

    经过分析,区间权值达到 2n+12n+1 当且仅当区间包含数 nnn1n-1,并且它们处于区间的中间位置。

    更精确:

    • 区间必须包含 {n,n1}\{n, n-1\}
    • 在区间排序后,nnn1n-1 必须是中间的两个数(LL 偶数)或者是中位数(LL 奇数时 nnn1n-1 相同?不可能,所以只考虑偶数情况)

    实际上,LL 为奇数时,Y=2×medianY = 2\times \text{median},要达到 2n+1L2n+1 - L,需要 median=nL12\text{median} = n - \frac{L-1}{2},这只在特定情况发生。

    但样例中 n=5n=5,输出个数是 55,我们验证一下哪些区间权值是 1111


    最终结论

    本题标准结论:

    • 最大权值 = 2n+12n+1
    • 达到最大权值的区间必须同时包含 nnn1n-1,且区间中大于等于 n1n-1 的数恰好有 (L+1)/2\lceil (L+1)/2 \rceil

    统计时,可以枚举包含 nnn1n-1 的区间,检查条件。


    算法步骤

    1. 找到 nnn1n-1 的位置 pnp_npn1p_{n-1}
    2. l=min(pn,pn1)l = \min(p_n, p_{n-1})r=max(pn,pn1)r = \max(p_n, p_{n-1})
    3. 区间必须包含 [l,r][l, r],设 Lmin=rl+1L_{\min} = r-l+1
    4. 对每个 LLminL \geq L_{\min},计算满足条件的区间个数:
      • 区间包含 [l,r][l, r]
      • 区间中大于等于 n1n-1 的数恰好有 (L+1)/2\lceil (L+1)/2 \rceil
    5. 统计总个数

    复杂度

    • 预处理每个位置左边/右边大于等于 n1n-1 的数的个数:O(n)O(n)
    • 统计区间个数:O(n)O(n)
    • O(n)O(n)

    总结

    本题的关键发现:

    1. 最大权值恒为 2n+12n+1,与区间长度无关
    2. 达到最大权值的区间必须包含 nnn1n-1
    3. 并且这两个数在区间排序后处于中间位置
    4. 通过位置分析和计数可在 O(n)O(n) 时间内解决
    • 1

    信息

    ID
    4541
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    4
    已通过
    1
    上传者