Pagini recente » Cod sursa (job #1163437) | Cod sursa (job #1400826) | Cod sursa (job #284378) | Cod sursa (job #2701689) | Cod sursa (job #2717565)
// 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 = -(1LL << 35), sumaCurenta = 0;
pair<int, int> celMaiBunIndiceDeInceputSiLungime;
int indiceDeInceput;
for (long long i = 1; i <= n; i++) {
fin >> x;
if (sumaCurenta + x >= x) {
sumaCurenta += x;
} else {
sumaCurenta = x;
indiceDeInceput = i;
}
if (sumaCurenta > sumaMax) {
sumaMax = sumaCurenta;
celMaiBunIndiceDeInceputSiLungime = {indiceDeInceput,
i - indiceDeInceput + 1};
}
}
fout << sumaMax << " " << celMaiBunIndiceDeInceputSiLungime.first << " "
<< celMaiBunIndiceDeInceputSiLungime.first +
celMaiBunIndiceDeInceputSiLungime.second - 1;
return 0;
}