1 条题解

  • 0
    @ 2025-8-24 22:44:21

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar EuphoricStar
    Remember.

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

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

    以下是正文


    考虑若原来的序列是不降的,那么进行 11 操作或 22 操作序列仍然不降。那么 11 操作直接线段树上二分然后打覆盖标记,22 操作直接打标记即可。

    考虑一般情况,发现某个时刻所有被 11 操作影响过的 ii(存在一次 11 操作使得 aiva_i \ge v)组成的集合 SSSS 内部的序列是单调的。

    于是整个序列被分成了两部分:SS[1,n]S[1, n] \setminus S。对于 SS11 操作直接线段树上二分然后打标记。22 操作就分别对两个部分打个标记即可。

    线段树一个结点需要维护:SS 部分的最大值及其最大下标(为了 22 操作后计算新的最大值),两部分分别的和及其下标的和,SS 部分的元素个数和这个区间在 SS 部分的最大下标(打覆盖标记时需要将最大值的最大下标重置为这个值)。

    剩下最后一个问题:如何计算一个元素何时加入 SS。考虑二分 midmid,相当于查询是否 j[1,mid],bj×i+aivj\exists j \in [1, mid], b_j \times i + a_i \ge v_j(其中 bib_i 为第 ii11 操作前面的 22 操作次数)。变形得 $\min\limits_{j = 1}^{mid} \{ -b_j \times i + v_j \} \le a_i$。考虑整体二分,维护一个 (bj,vj)(b_j, v_j) 的下凸包,check 就维护一个凸包上的指针即可。因为 bjb_j 单调,所以不用排序。注意可能存在若干个 bjb_j 相等,这种取它们 vjv_j 的最小值即可。

    总时间复杂度 O(nlogn)O(n \log n)

    code

    • 1

    信息

    ID
    7785
    时间
    3000ms
    内存
    512MiB
    难度
    7
    标签
    递交数
    0
    已通过
    0
    上传者