Cod sursa(job #534499)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 15 februarie 2011 19:53:24
Problema Subsecventa de suma maxima Scor 75
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <stdio.h>
#include <iostream>

const int DIM = 1 << 22;
int pos;
char buf[DIM];

void read(int &x)
{
    x = 0;

    while(!isdigit(buf[pos]) && buf[pos] != '-')
        if(++pos == DIM)
            fread(buf, sizeof(char), DIM, stdin), pos = 0;

    int semn = 1;
    if(buf[pos] == '-')
        semn = -1, pos++;
    while(isdigit(buf[pos]))
    {
        x = x * 10 + buf[pos] - '0';

        if(++pos == DIM)
            fread(buf, sizeof(char), DIM, stdin), pos = 0;
    }
    x *= semn;
}

inline int max(int a, int b)
{
    return (a<b)?b:a;
}

int main()
{
    freopen ("ssm.in","r",stdin);
    freopen ("ssm.out","w",stdout);

    int bestmax;
    int last, N, i, a;
    int inc = 1, bestinc = 1, bestfin = 1;

    read(N);
    read(last);
    bestmax = last;
    for(i = 2; i <= N; i++)
    {
        read(a);
        if(a > last + a){
            last = a;
            inc = i;
        }
        else last += a;

        if(bestmax < last){
            bestmax = last;
            bestinc = inc;
            bestfin = i;
        }
    }

    printf("%d %d %d\n",bestmax, bestinc, bestfin);
    return 0;
}