Cod sursa(job #814310)

Utilizator MtkMarianHagrSnaf MtkMarian Data 15 noiembrie 2012 20:26:56
Problema Subsecventa de suma maxima Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include<cstdio>
#include<fstream>

using namespace std ;

#define NMAX 600002
int n ,sum[NMAX],v[NMAX] , s , smax , smin, indleft , indright , indmin ;
int main ()
{
	ifstream in("ssm.in");
	ofstream out("ssm.out");

	in>>n;
	in>>v[1];
	s=v[1];
	smax = s ;
	smin = s;
	indleft=1 ;
    indright=1 ;
	indmin=1 ;
	
	for(int i = 2 ; i <= n ; ++i)
	{
		in>>v[i];
		
		if(v[i] > (s + v[i]) && v[i]>smax ) 
			{
				indleft = i ;
				indright = i ;
				smax = v[i]  ;
				s = s + v[ i ];
			}	
		else
			{
			
				s = s + v[ i ];				 
				if( s - smin > smax )
				{			   
					indleft = indmin + 1 ;
					indright = i ;
					smax = s -smin ;
				}				
				else				
					if( s-smin == smax )					
						if( ( i - indmin ) < (indright-indleft)  )
						{						
							indleft = indmin + 1  ;						
							indright = i ;						
							smax = s-smin ;
						}
					
			}
			
		if( s < smin )
			{
					smin = s  ;
					indmin=i;
			}
	}
	out<<smax<<" "<<indleft<<" "<<indright;
	return 0;
}