Pagini recente » Cod sursa (job #2043431) | Cod sursa (job #2824950) | Cod sursa (job #3241682) | Cod sursa (job #624604) | Cod sursa (job #2794367)
#include <fstream>
#include <climits>
using namespace std;
ifstream cin("ssm.in");
ofstream cout("ssm.out");
const int NMAX = 6000005;
int n;
long long v[NMAX];
long long get_sum(int L, int R, int &i, int &j)
{
if (L == R)
{
i = L;
j = L;
return v[L];
}
int p1, p2;
int mid = (L + R) / 2;
long long max_l = -LONG_LONG_MAX, max_r = -LONG_LONG_MAX;
long long sol = 0;
sol = get_sum(L, mid, i, j);
long long sum = get_sum(mid + 1, R, p1, p2);
if (sol < sum)
sol = sum, i = p1, j = p2;
sum = 0;
for (int st = mid; st >= L; st--)
{
sum += v[st];
if (max_l < sum)
max_l = sum, p1 = st;
}
sum = 0;
for (int dr = mid + 1; dr <= R; dr++)
{
sum += v[dr];
if (max_r < sum)
max_r = sum, p2 = dr;
}
if (sol < max_l + max_r)
sol = max_l + max_r, i = p1, j = p2;
return sol;
}
int main(int argc, const char *argv[])
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
int i, j;
long long sum = get_sum(1, n, i, j);
cout << sum << " " << i << " " << j;
return 0;
}