C. Alternating Subsequence

思路:如果当前位置是正数那么就一直寻找到遇到第一个负数的前一个数,取这个区间的最大值。负数也是这样
#include<bits/stdc++.h> using namespace std; const int maxn=2e5+10; int a[maxn]; int t,n,m,x,tmp; int sgn(int num){ if(num>0)return 1; return -1; } void solve(){ long long res=0; for(int i=0;i<n;){ int j=i; tmp=a[i]; while(j<n&&sgn(tmp)==sgn(a[j])){ tmp=max(tmp,a[j]); j++; } i=j; res+=tmp; } printf("%lld\n",res); } void INPUT(){ scanf("%d",&t); while(t--){ scanf("%d",&n); for(int i=0;i<n;i++)scanf("%d",&a[i]); solve(); } } int main(){ INPUT(); //solve(); return 0; }

 

posted @ 2021-12-25 11:09  ZangYiDe  阅读(56)  评论(0)    收藏  举报