Cod sursa(job #1511266)

Utilizator jimcarterJim Carter jimcarter Data 26 octombrie 2015 11:57:45
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>
#include <algorithm>
using namespace std;

FILE *f = fopen ( "ssm.in" , "r" ) , *g = fopen ( "ssm.out" , "w" );

int N , number , i , left , pos , right , lefts;
long long maxim , sum;

void read()
{
    fscanf ( f , "%d" , &N );

    fscanf ( f , "%d" , &number );

    sum = number; maxim = number; left = 1; right = 1; pos = 1;

    for ( i = 2 ; i <= N ; i ++ )
    {
        fscanf ( f , "%d" , &number );
        sum += number;
        if ( sum < 0 )
        {
            if ( number > maxim )
            {
                maxim = number;
                pos = i;
            }
            sum = 0;
            left = i + 1;
        }
        else
            if ( sum > maxim )
            {
                maxim = sum;
                lefts = left;
                right = i;
            }
            else
                if ( sum == maxim && ( right - lefts > i - left ) )
                {
                    lefts = left;
                    right = i;
                }
    }
    if ( maxim < 0 )
        lefts = right = pos;
}

int main()
{
    read();
    //print
    fprintf ( g , "%lld %d %d\n" , maxim , lefts , right );
    return 0;
}