【P1115】最大子段和(分治)

这个方法挺重要的 虽然这道题O(n)可以过

萌新冒个泡

#include
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<

 

你可能感兴趣的:(【P1115】最大子段和(分治))