Mai intai trebuie sa te autentifici.
Cod sursa(job #1266163)
Utilizator | Data | 18 noiembrie 2014 13:35:07 | |
---|---|---|---|
Problema | Subsecventa de suma maxima | Scor | 90 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.79 kb |
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("ssm.in");
ofstream g ("ssm.out");
const int NMAX = 6000000 + 1;
int n, a_max, b_max, s_max, s[NMAX];
inline void update(int valoare, int a, int b) {
s_max = valoare;
a_max = a;
b_max = b;
}
void rezolva() {
int x, a, b;
f >> n >> s[1];
update(s[1], 1, 1);
for (int i = 2; i < n; i++) {
f >> x;
if (x + s[i - 1] >= x) {
b++;
s[i] = s[i - 1] + x;
}
else {
a = b = i;
s[i] = x;
}
if (s[i] == s_max)
if (b - a < b_max - a_max) update(s[i], a, b);
if (s[i] > s_max) update(s[i], a, b);
}
g << s_max << ' ' << a_max << ' ' << b_max << '\n';
}
int main() {
rezolva();
return 0;
}