Cod sursa(job #679050)

Utilizator alexdmotocMotoc Alexandru alexdmotoc Data 12 februarie 2012 18:30:05
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
//O (N)

#include <cstdio>
#include <iostream>

using namespace std;

#define maxN 6000005
#define INF 0x3f3f3f3f

int N , x[maxN] , s[maxN] , best;

int main ()
{
	freopen ("ssm.in" , "r" , stdin);
	freopen ("ssm.out" , "w" , stdout);
	
	scanf ("%d" , &N);
	
	for (int i = 1 ; i <= N ; ++i)
	{
		scanf ("%d" , &x[i]);
		
		s[i] = s[i - 1] + x[i];
	}
	
	int min = 0 , sol = -INF , start , stop , aux_start;
	
	for (int i = 1 ; i <= N ; ++i)
	{
		best = s[i] - min;
		
		if (best > sol)
		{
			sol = best;
			start = aux_start;
			stop = i;
		}
		
		if (s[i] < min)
		{
			min = s[i];
			aux_start = i + 1;
		}
		
	}
	
	printf ("%d %d %d" , sol , start , stop);
	
	return 0;
}