Pagini recente » Cod sursa (job #1715942) | Cod sursa (job #2496917) | Cod sursa (job #591191) | Cod sursa (job #3144795) | Cod sursa (job #2717552)
// 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, sumaCurenta;
pair <int, int> celMaiBunIndiceDeInceputSiLungime;
int indiceDeInceput = 1;
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;
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;
}