题目:
C. Alternating Subsequence
link:1
思路:双指针,找正数找大的,负数找大的
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<map>
#include<cstring>
#include<cmath>
#define ll long long
using namespace std;
const int N = 2e5 + 10;
int q[N];
int main() {
int t;//正数找最大的,负数找的
cin>>t;
while (t--) {
int n;
cin >> n;
for (int i = 0; i < n; i++) cin >> q[i];
ll int ans = 0;
for (int i = 0, j; i < n; i++)
{
int t = q[i];
j = i;
while ((q[j] > 0 && q[j + 1] > 0 || q[j] < 0 && q[j + 1] < 0) && j < n - 1)
{
if (t < q[j + 1]) t = q[j + 1];
j++;
}
ans += t;
i = j;
}
cout << ans << endl;
}
return 0;
}