Cod sursa(job #304093)

Utilizator vanila_CPPIonescu Victor Cristian vanila_CPP Data 10 aprilie 2009 21:32:10
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <algorithm>
#define FIN "ssm.in"
#define FOUT "ssm.out"
#define MAX 6000010
using namespace std;
int v[MAX],dyn[MAX];
int N,lpoz,poz,pmax,pemax;

int main(void){

	freopen(FIN,"rt",stdin);
	freopen(FOUT,"wt",stdout);

	scanf("%d",&N);
	for (int i=1;i<=N;++i) {scanf("%d",&v[i]);}

	int maxim=v[1];
	pmax=pemax=1;
	for (int i=1;i<=N;++i){

		dyn[i]=v[i];
		poz=i;
		if (dyn[i-1]+v[i]>dyn[i]){dyn[i]=dyn[i-1]+v[i];poz=lpoz;} else 
			if (dyn[i-1]+v[i]==dyn[i] && lpoz<poz){poz=lpoz;}
		lpoz=poz;
		if (dyn[i]>maxim ){ maxim=dyn[i];pmax=poz;pemax=i;}
		else if (dyn[i]==maxim){
			if (poz<pmax){
				pmax=poz;
				pemax=i;
			};
		}
	}
	printf("%d %d %d\n",maxim,pmax,pemax);
	fclose(stdin);
	fclose(stdout);
	return 0;
}