Pagini recente » Cod sursa (job #282159) | Cod sursa (job #1378568) | Cod sursa (job #2093069) | Cod sursa (job #536562) | Cod sursa (job #1460650)
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <deque>
#define INF ( (1 << 30) - 1 + (1 << 30) )
#define mod 666013
using namespace std;
struct rez
{
int s, st, dr;
}r;
int n, i, v[6000005];
rez subsecventa(int st, int mij, int dr)
{
rez r;
int sts, drs; sts = drs = -INF;
int i;
int s = 0;
for(i = mij; i >= st; i--)
{
s += v[i];
if(s > sts)
{
sts = s;
r.st = i;
}
}
s = 0;
for(i = mij + 1; i <= dr; i++)
{
s += v[i];
if(s > drs)
{
drs = s;
r.dr = i;
}
}
r.s = sts + drs;
return r;
}
rez subsecventa(int st, int dr)
{
rez r, r1, r2, r3;
if(st == dr)
{
r.s = v[st];
r.st = r.dr = st;
return r;
}
int mij = st + ( (dr - st) >> 1 );
r1 = subsecventa(st, mij);
r2 = subsecventa(mij + 1, dr);
r3 = subsecventa(st, mij, dr);
if(r1.s > r2.s && r1.s > r3.s)
return r1;
if(r2.s > r3.s)
return r2;
return r3;
}
int main()
{
freopen("ssm.in", "r", stdin);
freopen("ssm.out", "w", stdout);
scanf("%d", &n);
for(i = 1; i <= n; i++)
scanf("%d", &v[i]);
r = subsecventa(1, n);
printf("%d %d %d", r.s, r.st, r.dr);
return 0;
}