Pagini recente » Cod sursa (job #2029721) | Cod sursa (job #2080710) | Cod sursa (job #2599047) | Cod sursa (job #3243286) | Cod sursa (job #2470665)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
const int NMAX = 7000005;
long long int n, s[NMAX], i;
int main(){
long long int min = 0, bestSum = -int(2e9), beg, end, idx;
fin >> n;
for(i = 1; i <= n; ++i)
fin >> s[i];
for(i = 1; i <= n; ++i)
{
// se calculeaza suma tuturor numerelor de la 1->i
s[i] += s[i - 1];
//daca suma este mai mare atunci se continua cautarea variabila end preluand capatul din dreapta as sirului iar beg luand pozitia noului subsir de suma maxima
if(bestSum < s[i] - min) bestSum = s[i] - min, end = i, beg = idx + 1;
//daca suma e mai mica atunci se cauta un nou sir idx = i, iar min devine suma respectiva
if(min > s[i]) min = s[i], idx = i;
}
fout << bestSum << ' ' << beg << ' ' << end;
fin.close();
fout.close();
return 0;
}