Pagini recente » Cod sursa (job #1162844) | Cod sursa (job #2364866) | Cod sursa (job #893934) | Cod sursa (job #1150656) | Cod sursa (job #2273398)
#include <bits/stdc++.h>
using namespace std;
ifstream in("ssm.in");
ofstream out("ssm.out");
const int minusInf = -1e9;
vector< int > v;
int sol = minusInf, st, dr;
void ssm(int left, int right) {
if(left == right) {
sol = v[left];
st = left; dr = right;
return;
}
int mid = (left + right) / 2;
ssm(left, mid);
ssm(mid + 1, right);
int r1 = minusInf, lIdx = mid, sLeft = 0;
for(int p = mid; p >= left; --p) {
sLeft += v[p];
if(sLeft >= r1) {
r1 = sLeft;
lIdx = p;
}
}
int r2 = minusInf, rIdx = mid + 1, sRight = 0;
for(int p = mid + 1; p <= right; ++p) {
sRight += v[p];
if(sRight >= r2) {
r2 = sRight;
rIdx = p;
}
}
if(r1 + r2 > sol) {
sol = r1 + r2;
st = lIdx; dr = rIdx;
} else {
if(r1 + r2 == sol) {
if(lIdx < st) {
st = lIdx;
} else {
if(lIdx == st) {
if(rIdx < dr) {
dr = rIdx;
}
}
}
}
}
}
int main() {
ios::sync_with_stdio(false); in.tie(0); out.tie(0);
int n; in >> n;
v.resize(n);
for(auto &x: v) in >> x;
ssm(0, n - 1);
out << sol << " " << st + 1 << " " << dr + 1 << "\n";
in.close(); out.close();
return 0;
}