Pagini recente » Cod sursa (job #1545484) | Cod sursa (job #3164446) | Cod sursa (job #1718481) | Cod sursa (job #340636) | Cod sursa (job #2717568)
// 80 puncte
// probabil gresesc asta:
// Dacă există mai mult subsecvenţe candidate la soluţie,
// atunci se va tipări cea cu indicele de început cel mai mic, iar în caz de
// egalitate cea mai scurtă.
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream fin("ssm.in");
ofstream fout("ssm.out");
long long n;
fin >> n;
long long x, sumaMax, sumaCurenta, indiceInceput = 1, indiceSfarsit = 1,
indiceDeInceputAuxiliar;
fin >> x;
sumaMax = x;
sumaCurenta = x;
for (long long i = 2; i <= n; i++) {
fin >> x;
if (sumaCurenta + x >= x) {
sumaCurenta += x;
} else {
// sumaMax = x; aici e o greseala
sumaCurenta = x;
// indiceInceput = i; aici e greseala
indiceDeInceputAuxiliar = i;
}
if (sumaCurenta > sumaMax) {
sumaMax = sumaCurenta;
indiceSfarsit = i;
indiceInceput = indiceDeInceputAuxiliar;
}
}
fout << sumaMax << " " << indiceInceput << " " << indiceSfarsit;
return 0;
}