Cod sursa(job #524306)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 20 ianuarie 2011 22:06:53
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <cstdio>
#include <cctype> 

int N,inc,sf,i,j,max,sum,v[7000011],p;

#define DIM 8192

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

void cit(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","r",stdin);
    cit(N);
    for (i=1;i<=N;++i)
         cit(v[i]);

    max=-1;
    sum=0;
	inc=sf=0;
    for (i=1;i<=N;++i)
    {
        if (sum>=0)
             sum+=v[i];
        else 
        {
            sum=v[i];
            p=i;
        }
        if (sum>max)
        {
            max=sum;
            inc=p;
            sf=i;   
        }
    }
    freopen("ssm.out","w",stdout);
	if (max==-1) sf=inc=N;
    printf("%d %d %d", max,inc,sf);
    
	return 0;
}