80分求助
查看原帖
80分求助
701533
Sugar_7566楼主2022/5/1 10:47
#include<iostream>
#include<algorithm>
using namespace std;

const int N = 200010;

int Maxsum(int a[],int left,int right)
{
    int sum = 0, rightsum = 0, leftsum = 0,midsum = 0;
    int lefts = 0, rights = 0, s1 = 0, s2 = 0;
    int center;

    if(right == left)
        sum = a[left];
    else
    {
        center = (left + right) >> 1;
        leftsum = Maxsum(a, left, center);
        rightsum = Maxsum(a, center + 1, right);

        for (int i = center; i >= left;i--)
        {
            lefts += a[i];
            s1 = max(lefts, s1);
        }

        for (int j = center + 1; j <= right;j++)
        {
            rights += a[j];
            s2 = max(rights, s2);
        }

        midsum = s1 + s2;
        if(leftsum < midsum)
            sum = midsum;
        else
            sum = leftsum;
        sum = max(rightsum, sum);
    }
    return sum;
}

int main()
{
    ios::sync_with_stdio(false);
    int n,a[N];
    cin >> n;
    for (int i = 0; i < n;i++)
        cin >> a[i];
    cout << Maxsum(a, 0, n - 1) << endl;
    return 0;
}
2022/5/1 10:47
加载中...