Pagini recente » Cod sursa (job #2045937) | Cod sursa (job #1708163) | Cod sursa (job #1471506) | Cod sursa (job #1168649) | Cod sursa (job #2269867)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
int _l, _r;
int divide(vector<int> v, int l, int r) {
if(l == r) return v[l];
int mid = (l + r)/2;
int r1 = divide(v, l, mid);
int r2 = divide(v, mid + 1, r);
int s_left = 0, s_right = 0, s = 0;
for(int i = mid; i >= l; --i) {
s+= v[i];
if(s > s_left){
s_left = s;
_l = i;
}
}
s = 0;
for(int i = mid + 1; i <= r; ++i) {
s+= v[i];
if(s > s_right){
s_right = s;
_r = i;
}
}
int s2 = s_left + s_right;
return max( max(s2, r1), r2 );
}
int main()
{
ifstream in("ssm.in");
ofstream out("ssm.out");
int n;
in >> n;
vector<int> v(n);
for(int i = 0; i < n; ++i) {
in >> v[i];
}
out << divide(v, 0, v.size() - 1); out << " " << _l + 1 << " " << _r + 1;
return 0;
}