Cod sursa(job #2798848)

Utilizator Cyf0Spineanu Rares Cyf0 Data 11 noiembrie 2021 23:39:52
Problema Subsecventa de suma maxima Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 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];
    }
    int x, y, mid = (l + r) / 2, sol;
    long long maxleft = -LONG_MAX, maxright = -LONG_MAX, s = DAC(mid + 1, r, x, y);
    sol = DAC(l, mid, i, j);
    if (!(sol >= s)) sol = s, i = x, j = y;
    s = 0;
    for (int st = mid; st >= l; st--)
    {
        s += a[st];
        if (maxleft < s)
        {
            maxleft = s;
            x = st;
        }
    }
    s = 0;
    for (int dr = mid + 1; dr <= r; dr++)
    {
        s += a[dr];
        if (maxright < s)
        {
            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;
    int x = DAC(1, n, i, j);
    fout<< x << " " << i << " " << j;
}