Nu aveti permisiuni pentru a descarca fisierul grader_test4.ok
Cod sursa(job #2490139)
Utilizator | Data | 9 noiembrie 2019 20:02:04 | |
---|---|---|---|
Problema | Subsecventa de suma maxima | Scor | 100 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 0.86 kb |
#include <iostream>
#include <fstream>
using namespace std;
const int NMAX = 6 * 1e6;
const long long INFINIT = 1000000000000000000;
ifstream fin ( "ssm.in" );
ofstream fout ( "ssm.out" );
int v[NMAX+1], sp[NMAX+1];
int main()
{
int i, n;
int min_sp, max_sum_i;
long long max_sum;
int poz_min, pozf, pozl;
fin >> n;
for ( i = 1; i <= n; i ++ ){
fin >> v[i];
sp[i] = sp[i-1] + v[i];
}
max_sum = -INFINIT;
min_sp = sp[0];
poz_min = 0;
for ( i = 1; i <= n; i ++ ){
max_sum_i = sp[i] - min_sp;
if ( max_sum < max_sum_i ){ /// actualizez maximul
max_sum = max_sum_i;
pozl = i;
pozf = poz_min;
}
if ( min_sp > sp[i] ){ /// calc pt urmatorul i
min_sp = sp[i];
poz_min = i;
}
}
fout << max_sum << ' ' << pozf + 1 << ' ' << pozl;
return 0;
}