Cod sursa(job #2798843)

Utilizator Cyf0Spineanu Rares Cyf0 Data 11 noiembrie 2021 23:31:03
Problema Subsecventa de suma maxima Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
long long a[6000001];
long long DAC(int l, int r, int &i, int &j)
{
    if (l == r)
    {
        i = l;
        j = l;
        return a[i];
    }
    long long mid=(l+r)/2, maxleft = -LONG_MAX, maxright = -LONG_MAX, x, y, sol = DAC(l, mid, i, j), s = DAC(mid + 1, r, x, y);
    if (!(sol >= s)) sol = s, i = x, j = y;
    s = 0;
    for (int st = mid; st >= l; st--)
    {
        s += a[st];
        maxleft = max(maxleft, s);
        x = st;
    }
    s = 0;
    for (int dr = mid + 1; dr <= r; dr++)
    {
        s += a[dr];
        maxright = max(maxright, s);
        y = dr;
    }
    if (sol < maxleft + maxright)
    {
        sol = maxleft + maxright;
        i = x;
        j = y;
    }
    return sol;
}
int main()
{
    ifstream fin("ssm.in");
    ofstream fout("ssm.out");
    int n;
    fin >> n;
    for (int i = 1; i <= n; i++)
    {
        fin >> a[i];
    }
    int i, j;
    fout << DAC(1, n, i, j);
}