Cod sursa(job #2961652)

Utilizator TheAndreiEnache Andrei Alexandru TheAndrei Data 6 ianuarie 2023 20:08:52
Problema Subsecventa de suma maxima Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

ifstream fin("ssm.in");
ofstream fout("ssm.out");

const int MAXN = 7000005;
const int ninf = -2147483647;

int suma[MAXN], n, bestSum = ninf, start, stop;

void det(int stg, int dr){
    if (dr == stg) {
        if (bestSum < suma[dr]){
            bestSum = suma[dr];
            start = stop;
            stop = dr;
        }
        return ;
    }
    int mid = (dr + stg) / 2;
    det(stg, mid);
    det(mid + 1, dr);

    int suf = 0, pre = 0, left, right;
    int maxSuf = ninf, maxPre = ninf;

    for (int i = mid; i >= stg; --i) {
        suf += suma[i];
        if (maxSuf <= suf)  maxSuf = suf, left = i;
    }
    for (int i = mid + 1; i <= dr; ++i) {
        pre += suma[i];
        if (maxPre < pre)  maxPre = pre, right = i;
    }
    if (maxPre + maxSuf > bestSum)
        bestSum = maxPre + maxSuf, start = left, stop = right;
}

int main(void) {
    fin >> n;
    for(int i=1;i<=n;i++)
        fin >> suma[i];
    det(1, n);
    fout << bestSum << " " << start << " " << stop;
    return 0;
}