1 条题解

  • 0
    @ 2026-9-3 10:47:37

    题解

    思路

    设前缀和为 sis_i,令 dpidp_i 表示划分前 ii 个元素的最大价值。最后一段从 j+1j+1 到 ii,其正负只由 sis_i 与 sjs_j 的大小关系决定。把三种关系分别整理,就得到三个区间最大值查询。

    做法

    若 sj<sis_j<s_i,转移值为 (dpj−j)+i(dp_j-j)+i;若相等,转移值为 dpjdp_j;若 sj>sis_j>s_i,转移值为 (dpj+j)−i(dp_j+j)-i。

    离散化所有前缀和。用一棵树状数组维护较小前缀和值域上的 dpj−jdp_j-j 最大值,再在反向排名上维护较大前缀和值域上的 dpj+jdp_j+j 最大值;每个离散值另存相等时的最大 dpjdp_j。计算 dpidp_i 后把三个量插入结构。

    子任务一可枚举 ii 之前的所有断点,得到 O(n2)O(n^2) 动态规划。子任务二中数组非负:若存在正数,把整个数组作为一段即可得到 nn;若全为零,答案为零。

    复杂度

    每组时间复杂度为 O(nlog⁡n)O(n\log n),空间复杂度为 O(n)O(n)。

    • 1

    信息

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