Pagini recente » Cod sursa (job #760425) | Cod sursa (job #448749) | Cod sursa (job #2245250) | Cod sursa (job #410854) | Cod sursa (job #2717554)
// 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 <iostream>
#include <fstream>
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};
}
else if (sumaCurenta == sumaMax) {
celMaiBunIndiceDeInceputSiLungime = min(celMaiBunIndiceDeInceputSiLungime, {indiceDeInceput, i - indiceDeInceput + 1});
}
}
fout<<sumaMax<< " "<<celMaiBunIndiceDeInceputSiLungime.first<< " "<<celMaiBunIndiceDeInceputSiLungime.first + celMaiBunIndiceDeInceputSiLungime.second - 1;
return 0;
}