Pagini recente » Cod sursa (job #3033548) | Cod sursa (job #1751760) | Cod sursa (job #1175123) | Cod sursa (job #126034) | Cod sursa (job #2916025)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream in("ssm.in");
ofstream out("ssm.out");
int v[6000001];
// bst[i] = suma maxima a unei subsecvente care se termina pe pozitia i
int bst[6000001];
int main()
{
int n, maxim, left, right;
in >> n;
for (int i = 1; i <= n; i++) { // O(n)
in >> v[i];
}
bst[1] = v[1]; // cazul de baza
maxim = bst[1];
right = 1;
for (int i = 2; i <= n; i++) { // O(n)
bst[i] = max(v[i], bst[i - 1] + v[i]);
if (bst[i] > maxim) { // O(1)
maxim = bst[i];
right = i;
}
}
// for (int i = 1; i <= n; i++) {
// cout << bst[i] << " ";
// }
// cout << '\n';
int s = 0;
for (int i = right; i >= 1; i--) {
s += v[i];
if (s == maxim) {
left = i;
}
}
cout << maxim << " " << left << " " << right << '\n';
return 0;
}