1 solutions

  • 3
    @ 2025-8-10 7:36:39

    题意

    定义合法区间为区间长度大于等于L的区间,找到所有合法区间内最大的中位数。

    题解

    如果去掉区间限制,那最大中位数就是只取最大的数,这方面好像没什么可优化的点。我们转成另一个问题,判断是否存在一个合法区间的最大中位数大于等于xx

    如何判定这个问题? 一个长度为LL的区间内,假设小于xx的数一共有yy个,那是否应该为 yL2y \leq \lceil \frac{L}{2} \rceil,就可以说明中位数大于等于xx

    所以前面的问题变成了如何判定一个区间,大于等于xx的数的数量 \geq 小于它的数的数量。我们把大于等于xx的数写成11,其它写成1-1。就变成了 1的数量1的数量1的数量 \geq -1的数量。问题变成了找到一个区间的和大于等于 00

    如何找到一个合法区间的和大于等于00

    设前缀和数组为SumSum即判断是否存在[l,r][l,r]使得SumrSuml10Sum_r - Sum_{l-1} \geq 0rl+1Lr - l + 1 \geq L。我们枚举 rr,就知道 ll 的合法区间是一个前缀(即[1,,r+1L][1, \dots, r + 1 - L]),那就是要找这个前缀里找到S[l1]S[l-1]的值最小。那就可以使得SumrSuml1Sum_r - Sum_{l-1}最大。判定它是否大于00

    假设我们知道 f(x)f(x) 表示合法区间是否是否存在中位数大于等于 xx。那我们只要找到一个最大f(x)==truef(x) == true,可以注意到定义和前面,我们发现随着xx增大,这个条件越不容易满足。所以是满足单调性的。那只需要二分xx即可。

    • 1

    Information

    ID
    4
    Time
    1000ms
    Memory
    256MiB
    Difficulty
    6
    Tags
    # Submissions
    31
    Accepted
    8
    Uploaded By