Cod sursa(job #2491109)

Utilizator CosminMorarMorar Cosmin Andrei CosminMorar Data 11 noiembrie 2019 20:19:28
Problema Subsecventa de suma maxima Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n, valoare, valMax = INT_MIN, pozValMax = INT_MAX, pozValMin = INT_MIN, pozMin;
int v[6000001];

int CalculeazaValMinMax(int pozValMax) {
    int pozValMin = pozValMax;
    while (v[pozValMin - 1] >= 0 && pozValMin > 1)
        pozValMin--;
    return pozValMin;
}

int CalculeazaValMinMin(int pozValMax) {
    int pozValMin = pozValMax;
    while (v[pozValMin - 1] > 0 && pozValMin > 1)
        pozValMin--;
    return pozValMin;
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> valoare;
        v[i] = max(v[i - 1] + valoare, valoare);
        if (v[i] > valMax) {
            valMax = v[i];
            pozValMax = i;
            pozValMin = CalculeazaValMinMax(i);
        } else if (v[i] == valMax) {
            pozMin = CalculeazaValMinMin(i);
            if (i - pozMin < pozValMax - pozValMin) {
                pozValMin = pozMin;
                pozValMax = i;
            }
        }
    }

    fout << valMax << ' ' << pozValMin << ' ' << pozValMax;
    return 0;
}