#CF1667B. 最优划分

    ID: 1315 传统题 5000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>2100Codeforces动态规划树状数组离线处理

最优划分

最优划分

  • 时间限制:5 秒
  • 内存限制:256 MiB

题目描述

把整数数组 aa 划分成若干连续非空子数组。子数组 [l,r][l,r] 的元素和为 ss:若 s>0s>0,价值为 r−l+1r-l+1;若 s=0s=0,价值为 00;若 s<0s<0,价值为 −(r−l+1)-(r-l+1)。

求所有子数组价值之和的最大值。

输入格式

第一行包含测试组数 tt。每组第一行包含 nn,第二行包含 nn 个整数 aia_i。

输出格式

每组输出一个整数答案。

样例输入 1

5
3
1 2 -3
4
0 -2 3 -4
5
-1 -2 3 -1 -1
6
-1 2 -3 4 -5 6
7
1 -1 -1 1 -1 -1 1

样例输出 1

1
2
1
6
-1

数据范围

  • 1≤t≤5×1051\le t\le5\times10^5;
  • 1≤n≤5×1051\le n\le5\times10^5;
  • −109≤ai≤109-10^9\le a_i\le10^9;
  • 所有测试组的 nn 之和不超过 5×1055\times10^5。
子任务编号 分值 特殊限制
1 20 每组均满足 n≤20n\le20
2 40 每个 ai≥0a_i\ge0
3 无特殊限制