Pagini recente » Cod sursa (job #1921057) | Cod sursa (job #2035670) | Cod sursa (job #833319) | Cod sursa (job #2044016) | Cod sursa (job #3350937)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("ssm.in");
ofstream g("ssm.out");
int main()
{
int n;
f >> n;
int curent_max = -2000000000; // Valoare extrem de mica, protejeaza impotriva testelor cu numere exclusiv negative
int max_global = -2000000000;
int start = 1, end = 1, temp_start = 1;
int x;
for (int i = 1; i <= n; i++)
{
f >> x;
// Daca suma curenta a devenit negativa, ne "trage in jos" urmatoarele secvente.
// O aruncam si incepem o secventa noua de la elementul curent.
if (curent_max < 0)
{
curent_max = x;
temp_start = i;
}
else
{
curent_max += x;
}
// Daca gasim o suma strict mai mare, actualizam maximul si indicii finali.
// Inegalitatea stricta (>) garanteaza ca nu suprascriem solutia cu o secventa
// de aceeasi suma care apare mai tarziu (respectand regula indicelui minim de inceput).
if (curent_max > max_global)
{
max_global = curent_max;
start = temp_start;
end = i;
}
}
g << max_global << " " << start << " " << end << "\n";
f.close();
g.close();
return 0;
}