1 条题解

  • 0
    @ 2025-10-30 10:51:45

    1. 操作的性质分析

    xix_i 表示对鱼 ii 使用 A 操作的次数,yiy_i 表示对鱼 ii 使用 B 操作的次数。

    那么鱼 ii 的最终智力为: CiCi = DxiD⋅xi + k=1∑k=1iykiyk

    2. 重新表述问题

    定义前缀和 Si=k=1iykS_i = \sum_{k=1}^i y_k,则有: CiCi=DxiD⋅xi+SiSi

    3. 可行性条件

    从上面的分析,我们可以得出:

    SiS_i 必须是非递减序列(因为 Si=k=1iykS_i = \sum_{k=1}^i y_k

    SiCiS_i \leq C_i

    CiSiC_i - S_i 必须是 DD 的倍数

    4. 贪心构造

    为了最小化 xi=CiSiD\sum x_i = \sum \frac{C_i - S_i}{D},我们需要最大化 SiS_i,但受到约束:

    SiCiS_i \leq C_i

    SiCi(modD)S_i \equiv C_i \pmod{D}(即 SiS_iCiC_iDD 同余)

    SiS_i 非递减

    因此最优策略是:对于每个 ii,选择不超过 CiC_i 的最大值,使得 SiCi(modD)S_i \equiv C_i \pmod{D},同时保持序列非递减。

    5. 算法设计

    对于区间 [L,R][L, R] 的查询:

    检查可行性:

    LLRR,我们需要构造非递减序列 SiS_i 满足上述条件

    关键检查:是否存在 ii 使得我们无法构造合法的 SiS_i

    计算最小 A 操作次数:

    如果可行,答案为 i=LRCiSiD\sum_{i=L}^R \frac{C_i - S_i}{D}

    其中 SiS_i 是按上述贪心策略构造的

    6. 高效实现

    由于 N,QN, Q 可达 3×1053 \times 10^5,我们需要 O(logN)O(\log N)O(1)O(1) 处理每个查询。

    关键技巧:

    预处理每个位置 iiTi=CiDDT_i = \lfloor \frac{C_i}{D} \rfloor \cdot D(即不超过 CiC_i 的最大 DD 的倍数)

    对于区间 [L,R][L, R],我们需要检查 TiT_i 是否构成非递减序列

    如果不是,需要将某些 TiT_i 调小以保持非递减,但要尽量大

    这可以用单调栈或线段树维护区间最小值、最大值等信息。

    复杂度分析

    预处理:O(N)O(N)

    每个查询:使用合适的数据结构可以做到 O(logN)O(\log N)

    总复杂度:O(N+QlogN)O(N + Q\log N),可以应对最大数据范围

    • 1

    信息

    ID
    4743
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者