1 条题解

  • 0
    @ 2025-8-24 22:55:16

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Cocoly1990
    成事不说 遂事不谏 既往不咎

    搬运于2025-08-24 22:55:16,当前版本为作者最后更新于2024-05-30 21:06:24,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    官方题解

    考虑从序列从前向后确定每个值,对 [1,i1][1,i-1] 二分 rankrank 可以得到 ii,代价为 1ilogi\sum \frac{1}{i}\log i,代价大约 3434

    考虑值域从大到小确定每个值,当求出前 xx 大时,很容易设计一个比较器,使得在一次询问内求出区间 [l,r][l,r] 内是否包含第 x+1x+1 大。

    一个有趣的发现:将序列分两份,我们可以用一次询问来确定 xx 在序列的左侧还是右侧,之后每次二分的时候我们都保证了询问区间长度 >n2>\frac{n}{2}

    这样可以容易做到 n×2n×(logn+1)n\times \frac{2}{n}\times (\log n+1)。大约是 2222 次。

    考虑结合两个做法,把序列分两段,用 11 的代价确定两块的构成,然后运用做法一,可以做到 1max{i,ni}logi\sum \frac{1}{\max\{i,n-i\}}\log i,大约是 1414 次。

    还能不能再给力一点!注意到 logi\log i 实现的精细一点可以做到 logmin{i,ni+1}\log \min\{i,n-i+1\},这样理论分析就可以做到 <11.8<11.8 次。

    经过构造可以把标算卡到基本满。

    • 1

    信息

    ID
    9796
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者