Pagini recente » Cod sursa (job #2961335) | Cod sursa (job #1109922) | Cod sursa (job #1785673) | Cod sursa (job #2961344) | Cod sursa (job #3317203)
#include <iostream>
#include <fstream>
#include <vector>
#include <climits>
using namespace std;
int main() {
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int N;
fin >> N;
vector<int> S(N + 1);
for (int i = 1; i <= N; i++)
fin >> S[i];
int cur_sum = S[1];
int max_sum = S[1];
int start_curent = 1;
int best_start = 1, best_end = 1;
for (int i = 2; i <= N; i++) {
// dacă elementul curent e mai mare decât suma anterioară + el, încep o nouă subsecvență
if (S[i] > cur_sum + S[i]) {
cur_sum = S[i];
start_curent = i;
} else {
cur_sum += S[i];
}
// dacă am găsit o sumă mai mare, o salvez
if (cur_sum > max_sum) {
max_sum = cur_sum;
best_start = start_curent;
best_end = i;
}
}
fout << max_sum << " " << best_start << " " << best_end << "\n";
return 0;
}