推荐博客:https://blog.csdn.net/lin_disguiser/article/details/50821885
当时想到的是第一个思路,但不如第二个好,第一个时间复杂度比第二个要高。
#include <iostream>
#include <cstdio>
using namespace std;
#define inf 0x3f3f3f3f
#define N 200010
#define ll long long
ll a[N],b[N],n,t;
int main()
{
scanf("%lld",&t);
while(t--)
{
ll sum=0;
scanf("%lld",&n);
for(int i=1; i<=n; i++)
{
scanf("%lld",&a[i]);
sum+=a[i];
b[i]=-a[i];
}
ll ans=0,tsum=-inf;
for(int i=1; i<=n; i++)
{
if(a[i-1]>0)
a[i]+=a[i-1];
if(b[i-1]>0)
b[i]+=b[i-1];
ans=max(ans,a[i]);
tsum=max(tsum,b[i]);
}
printf("%lld\n",max(ans,sum+tsum));
}
return 0;
}