1 条题解

  • 0
    @ 2026-9-3 10:54:52

    题解

    思路

    记前缀和 si=∑k=1iaks_i=\sum_{k=1}^{i}a_k,并令 fif_i 为只考虑前 ii 个元素时的最大可选长度。

    若不选择以 ii 结尾的区间,则有 fi≥fi−1f_i\ge f_{i-1}。若最后一个区间为 [j+1,i][j+1,i],它合法当且仅当 sj≤sis_j\le s_i,转移为

    $$f_i=\max\left(f_{i-1},\ i+\max_{0\le j<i,\ s_j\le s_i}(f_j-j)\right).$$

    因此只需动态维护所有已出现前缀和对应的 fj−jf_j-j,并支持前缀最大值查询。离散化前缀和后使用树状数组即可。

    做法

    • 若所有元素非负,整个数组本身合法,答案直接为 nn。
    • 当 n≤2000n\le2000 时,枚举所有 j<ij<i 完成 O(n2)O(n^2) 动态规划。
    • 满分做法离散化 s0,s1,…,sns_0,s_1,\ldots,s_n,树状数组维护前缀最大值。先加入 j=0j=0 的状态,再依次计算并加入每个 ii。

    复杂度

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

    • 1

    信息

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