1 条题解

  • 0
    @ 2025-8-24 21:54:59

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar pigstd
    Hello, the cruel world.

    搬运于2025-08-24 21:54:59,当前版本为作者最后更新于2020-09-15 20:08:20,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    首先把所有学生按照成绩排序,排序后,设f1if1_i表示1i1 - i之中,奖学金前c12\frac {c-1} 2小的奖学金之和,f2if2_i表示ini - n之中,奖学金前c12\frac {c-1} 2小的奖学金之和

    我们枚举每一个可能作为中位数的学生,那么,如果一个学生ii能够作为中位数,那么就应该满足:bi+f1i1+f2i+1fb_i + f1_{i - 1} + f2_{i+1} \le f

    那么现在的问题就是怎么求出f1if1_if2if2_i

    那么显然我们可以推出:$f1_i=f1_{i-1}+\min(0,b_i-min1 _{i-1,\frac {c-1} 2})$,$f2_i=f2_{i+1}+\min(0,b_i-min2 _{i+1,\frac {c-1} 2})$,其中min1k,jmin1_{k,j}表示当i=1i = 1kk中所有bib_{i}中第jj小的数,min1k,jmin1_{k,j}表示当i=ki = knn中所有bib_{i}中第jj小的数

    那么怎么求出min1min1min2min2呢?可以写两个权值线段树,也可以直接写一个主席树维护

    代码:code

    • 1

    信息

    ID
    2918
    时间
    1000ms
    内存
    125MiB
    难度
    5
    标签
    递交数
    0
    已通过
    0
    上传者