1 条题解

  • 0
    @ 2026-9-29 20:33:35

    对于每一轮操作,我们用数组维护若干个 [l,r][l, r],表示在当前轮操作完后,“夜影”特工可能到达的位置。初始化这个数组为 [m,m][m, m]。

    对于每一次操作,遍历每一对 [l,r][l, r] 进行更新

    • 如果 ai<la_i < l,那么操作后可能的区间为 [l−1,r][l - 1, r]。
    • 如果 ai>ra_i > r,那么操作后可能的区间为 [l,r+1][l, r + 1]。
    • 如果 l≤ai≤rl \le a_i \le r,那么操作后可能的区间为 [1,1][1, 1], [n,n][n, n],当 l<rl < r 时,还有区间 [l,r][l, r]。

    操作完排序统计个数即可。排完序后可以对于有交叉的 [l,r][l, r] 进行合并,减少后续操作的次数。

    乍看之下,该解法的时间复杂度似乎是 O(nq)O(nq),因为可能存在的区间数量会达到 O(n)O(n) 级别,且每个区间都需要更新。但通过观察可以发现,实际同时存在的有效区间不会超过 33 个:初始区间 [m,m][m, m](可向左右扩展)、最左端点 [1,1][1, 1](仅能向右扩展)以及最右端点 [n,n][n, n](仅能向左扩展)。

    时间复杂度: O(q)O(q),维护的区间数量为常数级别。

    • 1

    信息

    ID
    8291
    时间
    1000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    19
    已通过
    7
    上传者