#P13. Concate and count

Concate and count

Concate and count

时间限制:1s1s

空间限制:256MB256MB

题目描述

有一个由 nn 个非零整数组成的序列 aa 。选择若干给定序列的子序列,并满足正负相间(即每个下一个元素的符号与当前元素的符号相反,如 [+,,+][+,-,+] ,或 [,+,][-,+,-] 等等)且长度最大,记长度为 kk 。若有多个长度最长的满足要求的子序列,在所有长度 kk 的这些正负相间的子序列中,选择元素总和最大的一个并输出总和。

数据格式

输入

第一行输入一个整数 tt ,表示共有 tt 组测试用例;

对于每个测试用例,第一行输入一个正整数 nn ,表示数组 aa 的长度;

接下来一行输入 nn 个数字 a1,a2......ai (1in)a_1,a_2......a_i\ (1 \leq i \leq n) 表示数组 aa 的元素。

输出

对于每个测试用例,输出一行一个整数,即最大正负相间的子序列的最大元素总和。

样例1

输入:

4
5
1 2 3 -1 -2
4
-1 -2 -1 -3
10
-2 8 3 8 -4 -15 5 -2 -3 1
6
1 -1000000000 1 -1000000000 1 -1000000000

输出:

2
-1
6
-2999999997

样例解释

  1. 在第一个样例中,选择的数据为 [1,2,(3),(1),2][1,2,(3),(-1),-2]
  2. 在第二个样例中,选择的数据为 [1,2,(1),3][-1,-2,(-1),-3]
  3. 在第三个样例中,选择的数据为 [(2),8,3,(8),(4),15,(5),(2),3,(1)][(−2),8,3,(8),(−4),−15,(5),(−2),−3,(1)]
  4. 在第四个样例中,所有数据均选择。

数据范围及约定

测试点编号 约定 测试点分值
1~2 t=1,1n100,100ai100,ai0t=1,1 \leq n \leq 100,−100 \leq ai \leq 100,ai≠0 每个测试点 10 分
3~5 $t=1,1 \leq n \leq 2*10^5,−10^9 \leq ai \leq 10^9,ai≠0$
5~10 $t \leq 10^4,1 \leq n \leq 2*10^5,−10^9 \leq ai \leq 10^9,ai≠0$

约定:对于所有测试用例,有 n2105\sum{n} \leq 2 * 10^5