Cod sursa(job #263355)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 20 februarie 2009 11:46:12
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<stdio.h>
#define N 6000010
int n,i,ok,s,b,e,S,B,E,a[N];
void readd(),solve(),prints();
int main()
{
	readd();
	solve();
	prints();
	return 0;
}
void readd()
{
	freopen("ssm.in","r",stdin);
	freopen("ssm.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++){ scanf("%d",&a[i]);if(a[i]>0)ok=1;}
}
void solve()
{
	if(!ok)
	{
		S=a[1];
		B=E=1;
		for(i=1;i<=n;i++)
			if(a[i]>S)
			{
				S=a[i];
				B=E=i;
			}
		return;
	}
	s=S=a[1];b=B=1;e=E=1;
	for(;;)
	{
		if(s<0){s-=a[b];b++;continue;}
		if(e<b){e++;s=a[b];continue;}
		if(s>S){S=s;B=b;E=e;}
		if(e==n)
			break;
		if(e<n)
			s+=a[++e];
	}
}
void prints()
{
	printf("%d %d %d\n",S,B,E);
}