Cod sursa(job #627718)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 30 octombrie 2011 15:12:19
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <cstdio>

#define file_in "ssm.in"
#define file_out "ssm.out"

int N,i,suma,smax,ind,inc,sf,V[6001010];

#define D 8192
char g_buf[D];
int g_p=D-1;


inline int get()
{

	int x=0,neg;
	while ((g_buf[g_p]<'0' || g_buf[g_p]>'9') && g_buf[g_p]!='-')
		if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
	neg=0;
	if(g_buf[g_p]=='-'){	neg=1;
		if(++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
	}
	while (g_buf[g_p]>='0' && g_buf[g_p]<='9'){
		x=x*10+g_buf[g_p]-'0';
		if (++g_p==D) fread(g_buf,1,D,stdin),g_p=0;
	}
	if (neg) x=-x;
	return x;
}

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	//scanf("%d", &N);
	N=get();
	for (i=1;i<=N;++i)
		 //scanf("%d", &V[i]);
	     V[i]=get();
	smax=-0x3f3f3f3f;
	suma=0;
	for (i=1;i<=N;++i){
		if (suma<0){
			suma=V[i];
			ind=i;
		}
		else
			suma+=V[i];
		if (smax<suma){
			smax=suma;
			inc=ind;
			sf=i;
		}
	}
	
	printf("%d %d %d", smax,inc,sf);
	
	return 0;
	
}