Pagini recente » Cod sursa (job #3200429) | Cod sursa (job #1953360) | Cod sursa (job #998449) | Cod sursa (job #388592) | Cod sursa (job #2961652)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("ssm.in");
ofstream fout("ssm.out");
const int MAXN = 7000005;
const int ninf = -2147483647;
int suma[MAXN], n, bestSum = ninf, start, stop;
void det(int stg, int dr){
if (dr == stg) {
if (bestSum < suma[dr]){
bestSum = suma[dr];
start = stop;
stop = dr;
}
return ;
}
int mid = (dr + stg) / 2;
det(stg, mid);
det(mid + 1, dr);
int suf = 0, pre = 0, left, right;
int maxSuf = ninf, maxPre = ninf;
for (int i = mid; i >= stg; --i) {
suf += suma[i];
if (maxSuf <= suf) maxSuf = suf, left = i;
}
for (int i = mid + 1; i <= dr; ++i) {
pre += suma[i];
if (maxPre < pre) maxPre = pre, right = i;
}
if (maxPre + maxSuf > bestSum)
bestSum = maxPre + maxSuf, start = left, stop = right;
}
int main(void) {
fin >> n;
for(int i=1;i<=n;i++)
fin >> suma[i];
det(1, n);
fout << bestSum << " " << start << " " << stop;
return 0;
}