Cod sursa(job #814102)

Utilizator MtkMarianHagrSnaf MtkMarian Data 15 noiembrie 2012 19:57:16
Problema Subsecventa de suma maxima Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>
#include<cmath>

using namespace std ;
#define NMAX 600002
int n ,sum[NMAX],v[NMAX] , s , smax , smin, indleft , indright , indmin ;
int main ()
{
	freopen("ssm.in" , "r" , stdin);
	freopen("ssm.out", "w",stdout);

	scanf("%d",&n);
	scanf("%d",&v[1]);
	s=v[1];
	smax = s ;
	smin = s;
	indleft=1 ;
    indright=1 ;
	indmin=1 ;
	
	for(int i = 2 ; i <= n ; ++i)
	{
		scanf("%d",&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;
			}
	}
	printf("%d %d %d" , smax ,indleft ,indright);
	return 0;
}