Cod sursa(job #2811766)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 3 decembrie 2021 08:48:30
Problema Subsecventa de suma maxima Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.35 kb
#include <stdio.h>

FILE *fin;
 
int poz, valBuff;
char buff[ ( 1 << 10 ) ];
char nextChar() {
    if( poz == valBuff ) {
        fread( buff, 1, valBuff, fin );
        poz = 0;
    }
 
    return buff[ poz++ ];
}
 
bool f[ 100 ];
int readInt() {
	int semn = 1;
    int rez = 0;
    int ch;
 
    while( !f[ ch = nextChar() ] );
    
    if( ch == '-' ) {
    	ch = nextChar();
    	semn = -1;
    }

    do
        rez = rez * 10 + ch - '0';
    while( f[ ch = nextChar() ] );
 
    return rez * semn;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

long long maxx, sum;
int n;

int main() 
{

    f[ '0' ] = f[ '1' ] = f[ '2' ] = f[ '3' ] = f[ '4' ] = 1;
    f[ '6' ] = f[ '7' ] = f[ '8' ] = f[ '9' ] = f[ '5' ] = f[ '-' ] = 1;
    valBuff = sizeof( buff );

	int x;
	fin = fopen( "ssm.in", "r" );
	fread( buff, 1, valBuff, fin );

	n = readInt();
	maxx = (long long)readInt();
	int left = 0, right = 0;
	long long suma = maxx;

	int l = 0, r = 0;
	for( int i = 1; i < n; i++ ) {
		x = readInt();
		if( suma + x >= x ) {
			suma += x;
			++r;
		} else {
			suma = x;
			r = l = i;
		}

		if( maxx < suma ) {
			maxx = suma;
			left = l;
			right = r;
		}
	}
	fclose( fin );

	FILE *fout = fopen( "ssm.out", "w" );
	fprintf( fout, "%lld %d %d\n", maxx, left + 1, right + 1 );
	fclose( fout );
	return 0;
}