Cod sursa(job #1126440)

Utilizator negrea.andreiAndrei Negrea negrea.andrei Data 26 februarie 2014 23:20:54
Problema Subsecventa de suma maxima Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
/*# include <fstream>

using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

int n, sume[6000005], maxim, sum, startSecv, endSecv, minim = 0, pozMin = 0, c;*/

# include <fstream>

using namespace std;

ifstream f("ssm.in");
ofstream g("ssm.out");

int n, sume[6000005], i, j, a, maxim = -2000000000, sum, imax, jmax, minim = 2000000000, c;

int main()
{
	f >> n;
	for (i = 1; i <= n; i++)
	{
		f >> a;
		sume[i] = sume[i-1] + a;
	}
	for (i = 1; i <= n; i++)
	{
		sum = sume[i] - minim;
		if(sum > maxim) 
		{
			maxim = sum;
			imax = i;
			c = jmax;
		}
		else
			if (sum == maxim) 
			{
				if(c > jmax) 
				{
					c = jmax;
					imax = i;
				}
				else 
					if (c == jmax) 
					{
						if((imax - jmax) < (imax - c))
						{
							c = jmax;
							imax = i;
						}
					}
			}
		if (sume[i] < minim) 
		{
			minim = sume[i];
			jmax = i+1;
		}
	}
	g << maxim << " " << c << " " << imax;
}
/*
int main()
{
	f >> n;
	for (int i = 1; i <= n; i++)
	{
		int a;
		f >> a;
		sume[i] = sume[i-1] + a;
	}

	maxim = sume[1];
	startSecv = 1;
	endSecv = 1;

	// Facem (sume[i] - minim) si daca minim = 0 consideram ca am putea lua sume[i] ca A[1] + ... + A[i]
	for (int i = 1; i <= n; i++)
	{
		sum = sume[i] - minim;
		if(sum > maxim) 
		{
			maxim = sum;
			endSecv = i;
			startSecv = pozMin + 1;
		}
		else
			if (sum == maxim) 
			{
				if(pozMin + 1 < startSecv) 
				{
				    startSecv =  pozMin + 1;
					endSecv = i;
				}
			}
		if (sume[i] < minim) 
		{
			minim = sume[i];
			pozMin = i;
		}
		}
	g << maxim << " " << startSecv << " " << endSecv;
}*/