Pagini recente » Cod sursa (job #2192695) | Cod sursa (job #3126621) | Cod sursa (job #361338) | Cod sursa (job #2316728) | Cod sursa (job #2798848)
#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];
}
int x, y, mid = (l + r) / 2, sol;
long long maxleft = -LONG_MAX, maxright = -LONG_MAX, s = DAC(mid + 1, r, x, y);
sol = DAC(l, mid, i, j);
if (!(sol >= s)) sol = s, i = x, j = y;
s = 0;
for (int st = mid; st >= l; st--)
{
s += a[st];
if (maxleft < s)
{
maxleft = s;
x = st;
}
}
s = 0;
for (int dr = mid + 1; dr <= r; dr++)
{
s += a[dr];
if (maxright < s)
{
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;
int x = DAC(1, n, i, j);
fout<< x << " " << i << " " << j;
}