1 条题解

  • 0
    @ 2026-4-4 15:21:26

    题目大意

    有一排 nn 块木板,你需要选择一个分界点 kk1kn11 \le k \le n-1),使得:

    • kk 块木板涂一种颜色
    • nkn-k 块木板涂另一种颜色

    mm 种颜色,第 ii 种颜色可以涂 aia_i 块木板(即这种颜色的油漆量足够涂 aia_i 块木板)。
    对于给定的 kk,一种颜色能用于前 kk 块当且仅当 aika_i \ge k,能用于后 nkn-k 块当且仅当 ainka_i \ge n-k

    要求:对于每个 kk,统计kk 块和后 nkn-k 块颜色不同的方案数,并对所有 kk 求和。


    解题思路

    1. 固定 kk 时的方案数

    对于固定的 kk,定义:

    • xx = 满足 aika_i \ge k 的颜色数量(可用于前 kk 块)
    • yy = 满足 ainka_i \ge n-k 的颜色数量(可用于后 nkn-k 块)

    如果不要求两段颜色不同,方案数为 xyx \cdot y(前段从 xx 种中选一种,后段从 yy 种中选一种)。

    但其中包含了前后段颜色相同的情况。
    前后段颜色相同时,这种颜色必须同时满足 aika_i \ge kainka_i \ge n-k,即 aimax(k,nk)a_i \ge \max(k, n-k)

    zz = 满足 aimax(k,nk)a_i \ge \max(k, n-k) 的颜色数量,则前后段颜色相同的方案数就是 zz(因为选定一种这样的颜色,整个栅栏全涂它,对应唯一一种分配)。

    因此,对于固定的 kk前后段颜色不同的方案数为:

    xyzx \cdot y - z

    2. 如何快速计算 x,y,zx, y, z

    将数组 aa 从小到大排序。

    • xx = 大于等于 kk 的元素个数 = m第一个k的位置m - \text{第一个} \ge k \text{的位置}
    • yy = 大于等于 nkn-k 的元素个数 = m第一个nk的位置m - \text{第一个} \ge n-k \text{的位置}
    • zz = 大于等于 max(k,nk)\max(k, n-k) 的元素个数

    注意到:

    • knkk \ge n-k(即 kn/2k \ge n/2),则 max(k,nk)=k\max(k, n-k) = k,此时 z=xz = x
    • k<nkk < n-k(即 k<n/2k < n/2),则 max(k,nk)=nk\max(k, n-k) = n-k,此时 z=yz = y

    因此:

    z=min(x,y)z = \min(x, y)

    于是方案数简化为:

    xymin(x,y)x \cdot y - \min(x, y)

    3. 最终答案

    对所有 k=1,2,,n1k = 1, 2, \dots, n-1 求和:

    $$\text{答案} = \sum_{k=1}^{n-1} \left( x_k \cdot y_k - \min(x_k, y_k) \right) $$

    其中 xk=mlower_bound(a,k)x_k = m - \text{lower\_bound}(a, k)yk=mlower_bound(a,nk)y_k = m - \text{lower\_bound}(a, n-k)


    4. 时间复杂度

    • 排序 aaO(mlogm)O(m \log m)
    • 对于每个 kk,两次二分查找(O(logm)O(\log m)),共 n1n-1
    • 总复杂度:O((m+n)logm)O((m + n) \log m)
    • 1

    信息

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