Cod sursa(job #2271948)

Utilizator DanielllGigel Muschi Danielll Data 29 octombrie 2018 15:26:22
Problema Subsecventa de suma maxima Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

const int MAXN = 1000001;

int V[MAXN] = {0}, S[MAXN] = {0}, n;

int main(void) {

    f >> n;
    for(int i = 1; i <= n; i++)
        f >> V[i];

    // In rezolvarea de mai jos, S[i] retine suma tuturor valorile intre pozitiile 1 .. i
    // best[i] = Max(S[i] - S[j]) cu j < i =>
    // best[i] = S[i] - Min(S[j]) cu j < i

    int bestSum = -int(2e9), min = 0, poz, inc, sf;
    for(int i = 1; i <= n; i++) {
        S[i] = S[i-1] + V[i];
        if (bestSum < S[i] - min)
            bestSum = S[i] - min, inc = poz + 1, sf = i;
        if (min > S[i]){
            min = S[i];
            poz = i;
        }
    }

    g << bestSum << " " << inc << " " << sf;

    return 0;
}