1 条题解

  • 0
    @ 2025-8-24 22:23:20

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar dottle
    Cy@?g|^a

    搬运于2025-08-24 22:23:20,当前版本为作者最后更新于2022-07-28 17:43:11,作者可能在搬运后再次修改,您可在原文处查看最新版

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

    以下是正文


    问题相当于求两个距离不大于 KK 的数对的和的最大值。

    将序列 KK 个分一块,对于每个块内的最大值,钦定他们是最大值或次大值之一,然后求出他们周围 K1K-1 个数的最大值,用他们的和更新答案。

    一开始的最大值使用单调队列求出。每次修改,只需要重新求出块内最大值,然后重新计算周围 O(1)O(1) 块的信息。使用线段树维护区间最大值即可。

    时间复杂度 O(n+qlogn)O(n+q\log n )


    证明,我们最担心出现这样的情况:答案是相邻两个块的两个非最大值的数匹配。设他们为 a,ba,b,所在块的分别的最大值为 c,dc,d,有 c>a,d>bc>a,d>b。考虑 aacc 而不是 bb 匹配,所以 b>cb>cbbaa 而不是 dd 匹配,所以 a>da>d。矛盾。

    • 1

    信息

    ID
    5725
    时间
    8000ms
    内存
    1024MiB
    难度
    6
    标签
    递交数
    0
    已通过
    0
    上传者