题目描述:
思路分析:题目俩要求,最长,值最大,异号,保证异号的情况是找到最长而且尽可能大,其实很容易想到,一开始先把第一个数单独放进去,保证不浪费任何一个元素,然后往下搜,如果异号直接放进去,如果同号,取最大继续搜
#include<iostream>
#include<algorithm>
#include<cstring>
#include<algorithm>
#define int long long
using namespace std;
int n,a,t,ans;
signed main()
{
cin>>t;
while(t--)
{
ans=0;
int mmax=0;//用于更新数据
cin>>n>>a;//先读入第一个元素保证不浪费
mmax=a;
for(int i=2;i<=n;i++)
{
cin>>a;
if((a>0&&mmax>0)||(a<0&&mmax<0))//保证同号
mmax=max(mmax,a);
else {
ans+=mmax;mmax=a;
}
}
ans+=mmax;//加上最后一个
cout<<ans<<endl;
}
return 0;
}