Pagini recente » Cod sursa (job #2693829) | Cod sursa (job #888311) | Cod sursa (job #383761) | Cod sursa (job #3289171) | Cod sursa (job #2491109)
#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;
}