我做这道题
的时候TLE
了
下面是代码,看看可以挽救吗qwq
#include<bits/stdc++.h>
using namespace std;
int s[500010],MAX,a[500010],n,sum;
long long ans(int l,int r)
{
return s[r]-s[l-1];
}
void dfs(int l,int r,int sum)
{
MAX=max(sum,MAX);
if(l==r)return;
int b1=0,b2=0;
int i=l,j=r;
while(a[++i]>0&&b1==1&&i<=r)
{
if(a[i]<0)b1=1;
}
dfs(i,r,ans(i,r));
while(a[--j]>0&&b2==1&&l<=j)
{
if(a[i]<0)b2=1;
}
dfs(l,j,ans(l,j));
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
sum+=a[i];
s[i]=s[i-1]+a[i];
}
dfs(1,n,sum);
cout<<MAX<<endl;
return 0;
}