1 条题解

  • 0
    @ 2026-8-24 13:11:55

    题解

    思路

    从左到右处理数组。处理完位置 ii 后,把 ii 所在的颜色称为“当前颜色”,另一种颜色称为“另一颜色”。红、蓝本身完全对称,因此不必记录具体颜色,只需记录另一颜色最后一个数的值 xx

    设状态值 fxf_x 表示处理完当前位置、另一颜色最后一个数为 xx 时的最大得分。用 x=0x=0 表示另一颜色尚未出现;由于所有 AiA_i 都是正数,这个哨兵不会与合法值混淆。

    转移

    设上一个数为 pp,当前读到 yy

    如果继续使用当前颜色,所有状态都保留 xx;仅当 p=yp=y 时统一增加 yy

    如果切换颜色,切换前另一颜色的最后一个值若等于 yy,当前数贡献 yy,否则贡献 00。切换后,新的“另一颜色”最后一个值变为 pp。因此切换所得的最好值为

    max(maxxfx, fy+y).\max\left(\max_x f_x,\ f_y+y\right).

    它只会更新下标 pp 对应的状态。

    做法

    每一步只需要四种操作:全体状态加同一个数、查询全局最大值、查询一个值、对一个值取最大。令实际状态为 fx=gx+tagf_x=g_x+tag,其中 tagtag 保存全局增量,再单独维护所有 gxg_x 的最大值即可在常数时间完成一次转移。

    值域不超过 10610^6,可用数组和时间戳记录被访问过的 gxg_x,避免每组数据清空整个值域。初始时只有 g0=0g_0=0,最终答案是全局最大的 gx+tagg_x+tag

    正确性证明

    对处理位置数作归纳。初始只处理 A1A_1 时,两种颜色等价,另一颜色为空,状态 f0=0f_0=0 完整描述所有方案。

    假设处理完 i1i-1 后,每个 fxf_x 都等于其定义下所有染色方案的最优得分。位置 ii 只有两种选择:保持与 i1i-1 相同的颜色,或切换到另一颜色。保持颜色时,另一颜色末值不变,贡献恰由 Ai1=AiA_{i-1}=A_i 决定;切换颜色时,原另一颜色末值决定贡献,且切换后的另一颜色末值恰为 Ai1A_{i-1}。转移分别枚举并取这两类方案的最大值,没有遗漏,也不会加入不合法方案。因此归纳成立,最终全局最大状态就是所有染色方案的最大得分。

    复杂度

    每个位置只进行常数次操作。单组数据时间复杂度为 O(n)O(n),额外空间复杂度为 O(V)O(V),其中 V=106V=10^6

    信息

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