Cod sursa(job #443194)

Utilizator alexandru92alexandru alexandru92 Data 16 aprilie 2010 12:56:21
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <fstream>
#define SIZE 8219
#define INF 0x3f3f3f3f

/*
 *
 */
using namespace std;
ifstream in;
int idx;
char file[SIZE];
inline void read( int& x )
{
	int sign=1;
	while( file[idx] < '0' || file[idx] > '9' )
	{
		if( '-' == file[idx] )
			sign=-1;
		if( ++idx == SIZE )
		{
			in.read( file, SIZE );
			idx=0;
		}
	}
	x=0;
	while( file[idx] >= '0' && file[idx] <= '9' )
	{
		x=x*10+file[idx]-'0';
		if( ++idx == SIZE )
		{
			in.read( file, SIZE );
			idx=0;
		}
	}
	x*=sign;
}
int main( void )
{
	int N, i, j, x, maxx, Smax, mstart=1, mend=1, S, start=1;
	in.open( "ssm.in" );
	read(N);
	read(x);
	for( S=Smax=maxx=x, i=2; i <= N; ++i )
	{
		read(x);
		if( maxx < x )
		{
			maxx=x;
			j=i;
		}
		if( S < 0 )
		{
			S=0;
			start=i;
		}
		S+=x;
		if( S > Smax )
		{
			Smax=S;
			mend=i;
			mstart=start;
		}
		else if( S == Smax && ( ( i-start+1 ) < (  mend-mstart+1 ) ) )
				mstart=start, mend=i;
	}
	ofstream out( "ssm.out" );
	if( Smax > maxx )
		out<<Smax<<' '<<mstart<<' '<<mend<<'\n';
	else out<<maxx<<' '<<j<<' '<<j<<'\n';
	return EXIT_SUCCESS;
}