Pagini recente » Cod sursa (job #1182857) | Cod sursa (job #2416391) | Cod sursa (job #3269617) | Cod sursa (job #3187067) | Cod sursa (job #2269863)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int l, r, sMax=-2000000;
void divide(vector<int> &v, int left, int right)
{
if(left == right)
return;
int mid{(left+right)/2};
divide(v, left, mid);
divide(v, mid+1, right);
int sLeft{0}, sRight{0}, s{0}, eLeft, eRight;
for(int i=mid; i>=left; --i)
{
s += v[i];
if(sLeft < s)
{
sLeft = s;
eLeft = i;
}
}
s = 0;
for(int i=mid+1; i<=right; ++i)
{
s += v[i];
if(sRight < s)
{
sRight = s;
eRight = i;
}
}
s = sLeft + sRight;
if(s > sMax)
{
sMax = s;
l = eLeft;
r = eRight;
}
}
int main()
{
ifstream fin("ssm.in");
int n;
fin >> n;
vector<int> v(n);
for(int i=0; i<n; ++i)
fin >> v[i];
ofstream fout("ssm.out");
divide(v, 0, n-1);
fout << sMax << ' ' << l+1 << ' ' << r+1;
return 0;
}