Cod sursa(job #689004)

Utilizator an_drey_curentandreycurent an_drey_curent Data 24 februarie 2012 01:01:03
Problema Subsecventa de suma maxima Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include<stdio.h>
#include<limits.h>
#define NMAX 6000005
int N,v[NMAX],start[NMAX];
void deschidere()
{
	freopen("ssm.in","r",stdin);
	freopen("ssm.out","w",stdout);
}
void citire()
{
	scanf("%d",&N);
	for(int i=0;i<N;i++)
		scanf("%d",&v[i]);
}
void dinamica()
{
	int i=0;
	start[i]=i;
	for(i=1;i<N;i++)
		if(v[i-1]+v[i] > v[i])
			v[i]=v[i-1]+v[i],start[i]=start[i-1];
		else
			v[i]=v[i],start[i]=i;
}
void rezolvare()
{
	int max=INT_MIN,inceput,sfarsit;
	for(int i=0;i<N;i++)
		if(v[i]>max)
			max=v[i],inceput=start[i],sfarsit=i;
		else
			if(v[i]==max)
				if(sfarsit-inceput > i-start[i])
					max=v[i],inceput=start[i],sfarsit=i;
	printf("%d %d %d",max,inceput+1,sfarsit+1);
}
int main()
{
	deschidere();
	citire();
	dinamica();
	rezolvare();
	return 0;
}