Cod sursa(job #2794366)

Utilizator vladutzu_finutzuVlad Cacenschi vladutzu_finutzu Data 4 noiembrie 2021 18:39:02
Problema Subsecventa de suma maxima Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("ssm.in");
ofstream cout("ssm.out");
const int NMAX = 6000005;
int n;
long long v[NMAX];
long long get_sum(int L, int R, int &i, int &j)
{
    if (L == R)
    {
        i = L;
        j = L;
        return v[L];
    }

    int p1, p2;
    int mid = (L + R) / 2;
    long long max_l = -LONG_LONG_MAX, max_r = -LONG_LONG_MAX;
    int sol = 0;
    sol = get_sum(L, mid, i, j);
    long long sum = get_sum(mid + 1, R, p1, p2);
    if (sol < sum)
        sol = sum, i = p1, j = p2;

    sum = 0;
    for (int st = mid; st >= L; st--)
    {
        sum += v[st];
        if (max_l < sum)
            max_l = sum, p1 = st;
    }

    sum = 0;
    for (int dr = mid + 1; dr <= R; dr++)
    {
        sum += v[dr];
        if (max_r < sum)
            max_r = sum, p2 = dr;
    }
    if (sol < max_l + max_r)
        sol = max_l + max_r, i = p1, j = p2;

    return sol;
}
int main(int argc, const char *argv[])
{
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> v[i];

    int i, j;
    long long sum = get_sum(1, n, i, j);

    cout << sum << " " << i << " " << j;
    return 0;
}