这个方法挺重要的 虽然这道题O(n)可以过
萌新冒个泡
#include<bits/stdc++.h>
const int INF=19260817;
const int N=200005;
using namespace std;
int n,a[N];
int Solve(int Left,int Right)
{
if(Left==Right) return a[Left];
int Mid=(Left+Right)/2;
int Left_max_sum=Solve(Left,Mid); int Right_max_sum=Solve(Mid+1,Right);
int sum=0;
int Max_LeftCon=-INF;
for(int i=Mid;i>=Left;i--)
{
sum+=a[i];
Max_LeftCon=max(Max_LeftCon,sum);
}
sum=0;
int Max_RightCon=-INF;
for(int i=Mid+1;i<=Right;i++)
{
sum+=a[i];
Max_RightCon=max(Max_RightCon,sum);
}
return max(Max_LeftCon+Max_RightCon,max(Left_max_sum,Right_max_sum));
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cout<<Solve(1,n);
return 0;
}