Cod sursa(job #969886)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 5 iulie 2013 16:48:26
Problema Subsecventa de suma maxima Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
//http://www.infoarena.ro/problema/ssm
#include<fstream>
using namespace std;
const int MAXN=6000001;
int s[MAXN],best[MAXN];
int n,maxim,incmax,sfmax,inc,sf;
void citire()
{
	ifstream fin("ssm.in");
	fin>>n;
	for (int i=1;i<=n;++i)
		fin>>s[i];
}
void rezolvare()
{
	int i;
	inc=1;sf=1;
	incmax=1;sfmax=1;
	for (i=1;i<=n;++i)
	{
		if (best[i-1]+s[i]>s[i])
		{
			best[i]=best[i-1]+s[i];
			++sf;
		}
		else
		{
			best[i]=s[i];
			inc=sf=i;
		}
		if (best[i]>maxim)
		{
			maxim=best[i];
			incmax=inc;
			sfmax=sf;
		}
		else if (best[i]==maxim && (sf-inc)<(sfmax-incmax))
		{
			incmax=inc;
			sfmax=sf;
		}
	}
}
void afisare()
{
	ofstream fout("ssm.out");
	fout<<maxim<<' '<<incmax<<' '<<sfmax<<'\n';
	fout.close();
}
int main()
{
	citire();
	rezolvare();
	afisare();
	return 0;
}