题目要求的是子序列,而并不是连续子序列,而且要满足两个要求
1. 子序列最长
2. 子序列相邻元素正负性要不同
每次从连续的正负性相同的元素中选取一个最大值加入到答案中
最后的答案既满足题目要求,和也最大
int n, a[N];
int sign(int x)
{
if (x > 0) return 1;
if (x < 0) return -1;
return 0;
}
void solve()
{
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &a[i]);
LL sum = 0;
for (int i = 0; i < n; i ++ )
{
int tmp = a[i];
int j = i + 1;
while (j < n && sign(a[i]) == sign(a[j]))
{
tmp = max(tmp, a[j]);
j ++;
}
i = j - 1;
sum += tmp;
}
printf("%lld\n", sum);
}