Pagini recente » Cod sursa (job #1061593) | Cod sursa (job #2305629) | Cod sursa (job #777804) | Cod sursa (job #235401) | Cod sursa (job #2274608)
#include <iostream>
#include <fstream>
#include <vector>
#include <limits.h>
using namespace std;
int _l = 0, _r = 0, s = INT_MIN;
vector<int> v;
void divide(int l, int r) {
cout << s << "\n";
if (l == r) {
if (s < v[l]) {
s = v[l];
_r = _l = l;
}
return;
}
int m = (l + r) / 2;
divide(l, m);
divide(m + 1, r);
int r1 = INT_MIN, r2 = INT_MIN, left = 0, right = 0;
int s_left = 0, s_right = 0;
for (int i = m; i >= l; --i) {
s_left += v[i];
if (r1 <= s_left) {
r1 = s_left;
left = i;
}
}
for (int i = m + 1; i <= r; ++i) {
s_right += v[i];
if (r2 < s_right) {
r2 = s_right;
right = i;
}
}
if (r1 + r2 > s) {
s = r1 + r2;
_l = left, _r = right;
}
}
int main()
{
ifstream in("ssm.in");
ofstream out("ssm.out");
int n;
in >> n;
for (int i = 0; i < n; ++i) {
int x;
in >> x;
v.push_back(x);
}
divide(0, n - 1);
out << s << " " << _l + 1 << " " << _r + 1;
in.close();
out.close();
return 0;
}