Cod sursa(job #27131)

Utilizator TabaraTabara Mihai Tabara Data 6 martie 2007 09:39:28
Problema Buline Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>

#define in "buline.in"
#define out "buline.out"
#define NMAX 200001

#define maxim(a,b) ( (a) > (b) ? (a) : (b) )
#define minim(a,b) ( (a) < (b) ? (a) : (b) )

int smax;
int n, a[NMAX], sum[NMAX], tata[NMAX], inf;

int main()
{
    freopen( in, "r", stdin );
    freopen( out, "w", stdout );
    
    int i, col;
    scanf( "%d", &n );
    for ( i = 1; i <= n; ++i )
    {
        scanf( "%d%d", &a[i], &col);
    }
    
    //secventa de suma maxima
    sum[0] = 0;
    tata[0] = 0;
    for ( i = 1; i <= n; ++i )
    {
        sum[i] = sum[i-1] + a[i];
        tata[i] = maxim( tata[i-1], a[i] );
//        printf( "%d %d\n", sum[i], tata[i] );
    }
    
    smax = 0; 
    inf = 1000000;
    int best;
    int st, dr;
    for ( i = 1; i <= n; ++i )
    {
        best = tata[i-1] + sum[n] - sum[i-1];
        if ( best < inf ) 
        {
             inf = best;
             st = i;
        }
        else if ( best == inf ) 
        {
             st = minim( st, i );
        }
    }     
    
    printf( "%d %d %d\n", inf, st, dr = st + 1 );
    return 0;
}