Pagini recente » Cod sursa (job #1165238) | Cod sursa (job #2798843)
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;
long long a[6000001];
long long DAC(int l, int r, int &i, int &j)
{
if (l == r)
{
i = l;
j = l;
return a[i];
}
long long mid=(l+r)/2, maxleft = -LONG_MAX, maxright = -LONG_MAX, x, y, sol = DAC(l, mid, i, j), s = DAC(mid + 1, r, x, y);
if (!(sol >= s)) sol = s, i = x, j = y;
s = 0;
for (int st = mid; st >= l; st--)
{
s += a[st];
maxleft = max(maxleft, s);
x = st;
}
s = 0;
for (int dr = mid + 1; dr <= r; dr++)
{
s += a[dr];
maxright = max(maxright, s);
y = dr;
}
if (sol < maxleft + maxright)
{
sol = maxleft + maxright;
i = x;
j = y;
}
return sol;
}
int main()
{
ifstream fin("ssm.in");
ofstream fout("ssm.out");
int n;
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> a[i];
}
int i, j;
fout << DAC(1, n, i, j);
}