1 条题解

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

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar vegetable_king
    全身全霊!MORE MORE JUMP!!

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

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

    以下是正文


    可能更好的阅读体验

    一个不需要任何数据结构,代码好写,而且时间复杂度严格 O(n)O(n) 的解法!

    下文中令 aa 为题目中的 cc 序列。

    考虑一对限制 (x,y)(x, y) 的本质是什么。根据题意得知,maxi=1xai<ay\max_{i = 1}^x a_i < a_y,且 akmaxi=1xai(x<k<y)a_k \le \max_{i = 1}^x a_i(x < k < y),于是可以推出 maxi=1y1ai<ay\max_{i = 1}^{y - 1} a_i < a_y,也就是说。ak(x<k<y)a_k(x < k < y) 一定不是严格前缀最大值,而 aya_y 一定是严格前缀最大值。

    于是我们可以 O(n)O(n) 求出数组 bbbi=1/0/1b_i = -1/0/1,表示 aia_i 一定不是 / 不一定是 / 一定是 前缀最大值,或者推出矛盾(即一个位置同时应该是 1,1-1, 1 的情况),判无解即可。

    考虑构造。首先我们考虑 aa 全都不确定的情况,此时是简单的,bi=1b_i = 1 时令 ai=maxj=1i1aj+1a_i = \max_{j = 1}^{i - 1} a_j + 1,否则令 ai=1a_i = 1 即可。

    如果当前的 aia_i 确定了,那我们考虑判断合不合法。

    1. 如果 bi=1b_i = 1aimaxj=1i1aja_i \le \max_{j = 1}^{i - 1} a_j 则一定无解,因为我们在最小化字典序的同时最小化了前缀 max\max
    2. 如果 bi=1b_i = -1ai>maxj=1i1a_i > \max_{j = 1}^{i - 1},则我们考虑往前找到一个最大的 pp 使得 apa_p 未确定且 bi1b_i \ne -1,令 ap=aia_p = a_i 来满足 aia_i 的限制。如果找不到这样的 pp 那么显然无解;调整后 apa_p 可能会与 [p+1,i1][p + 1, i - 1] 中的一些位置的限制冲突,此时也一定无解。因为冲突的位置 oo 一定满足 aoa_o 确定了,且 bo=1b_o = 1,而这样的位置相当于给前缀 max\max 设置了上界。

    于是我们可以做到 O(n)O(n) 构造并且判定是否有解。代码在这里。

    • 1

    信息

    ID
    9700
    时间
    2000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    0
    已通过
    0
    上传者