Pagini recente » Cod sursa (job #1342191) | Cod sursa (job #2317212) | Cod sursa (job #414983) | Cod sursa (job #2175923) | Cod sursa (job #1499311)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
vector <int> v;
int ssm(int left, int right, int &l, int &r) {
if(left == right)
return v[left];
int mid = (left + right) / 2;
int sum = v[mid], maxx = v[mid];
l = r = mid;
for(int i = mid - 1; i >= left; --i){
sum += v[i];
if(sum > maxx){
maxx = sum;
l = i;
}
}
sum = maxx;
for(int i = mid + 1; i <= right; ++i) {
sum += v[i];
if(sum > maxx){
maxx = sum;
r = i;
}
}
int li, ri;
int maxl = ssm(left, mid-1, li, ri);
if(maxl > maxx) {
maxx = maxl;
l = li;
r = ri;
}
int maxr = ssm(mid+1, right, li, ri);
if(maxr > maxx) {
maxx = maxr;
l = li;
r = ri;
}
return maxx;
}
int main() {
int n, x, l, r;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
fin >> n;
for(int i = 0; i < n; ++i) {
fin >> x;
v.push_back(x);
}
fout << ssm(0, n-1, l, r) << " ";
++l; ++r;
fout << l << " " << r;
return 0;
}