Pagini recente » Cod sursa (job #547038) | Cod sursa (job #801671) | Cod sursa (job #346992) | Cod sursa (job #536736) | Cod sursa (job #1499318)
#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;
if(left < mid){
int maxl = ssm(left, mid-1, li, ri);
if(maxl > maxx) {
maxx = maxl;
l = li;
r = ri;
}
}
if(mid < right){
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;
}