Cod sursa(job #261130)

Utilizator Mishu91Andrei Misarca Mishu91 Data 17 februarie 2009 21:38:06
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <cctype>

#define INF 0x3f3f3f
#define DIM 8192

char buf[DIM];
int poz = DIM - 1;

void read(int &x)
{
    x = 0;
    int semn = 1;
    while(!isdigit(buf[poz]) && buf[poz] != '-')
        if(++poz == DIM)
            fread(buf, sizeof (char), DIM, stdin), poz = 0;
    if(buf[poz] == '-')
    {
        semn = -1;

        if(++poz == DIM)
            fread(buf, sizeof (char), DIM, stdin), poz = 0;
    }

    while(isdigit(buf[poz]))
    {
        x = x * 10 + semn*(buf[poz] - '0');

        if(++poz == DIM)
            fread(buf, sizeof (char), DIM, stdin), poz = 0;
    }
}

int main()
{
    freopen("ssm.in","rt",stdin);
    freopen("ssm.out","wt",stdout);

    int Act = -1, Bst = -INF, Inc, x, Bi, Bs, N;
    read(N);

    for(int i = 1; i <= N; ++i)
    {
        read(x);
        
        if(Act >= 0)
            Act += x;
        else
            Act = x, Inc = i;
        if(Act > Bst)
            Bst = Act, Bi = Inc, Bs = i;
    }
    printf("%d %d %d\n",Bst, Bi, Bs);
}