Cod sursa(job #526669)

Utilizator DraStiKDragos Oprica DraStiK Data 29 ianuarie 2011 10:03:20
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <algorithm>
using namespace std;

#define INF 0x3f3f3f3f
#define LIM 10005

int n,sum_bst,sum_cur,sum_min,ind_min,ind_st_bst,ind_dr_bst;
int pozitie=LIM-1;
char buff[LIM];

inline void cit (int &nr)
{
    char semn;

    for (; !isdigit (buff[pozitie]); )
    {
        semn=buff[pozitie];
        if (++pozitie==LIM)
        {
            fread (buff,1,LIM,stdin);
            pozitie=0;
        }
    }
    for (nr=0; isdigit (buff[pozitie]); )
    {
        nr=nr*10+buff[pozitie]-'0';
        if (++pozitie==LIM)
        {
            fread (buff,1,LIM,stdin);
            pozitie=0;
        }
    }
    if (semn=='-')
        nr=-nr;
}

void read_solve ()
{
    int i,x;

    cit (n);
    sum_bst=-INF;
    for (i=1; i<=n; ++i)
    {
        cit (x);
        sum_cur+=x;
        if (sum_cur-sum_min>sum_bst)
        {
            sum_bst=sum_cur-sum_min;
            ind_st_bst=ind_min;
            ind_dr_bst=i;
        }
        if (sum_cur<sum_min)
        {
            sum_min=sum_cur;
            ind_min=i;
        }
    }
    printf ("%d %d %d",sum_bst,ind_st_bst+1,ind_dr_bst);
}

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

    read_solve ();

    return 0;
}