Cod sursa(job #22633)

Utilizator rusRus Sergiu rus Data 26 februarie 2007 23:05:13
Problema Secventa 2 Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
//Subsir consecutiv de suma maxima

#include <fstream.h>

int x[50001], smax, s,lung;
int n, i, j, i1, k;

/*
	smax - suma maxima care se construieste treptat
	s    - suma actuala
	i    - pozitia de inceput a secventei maxime
	j    - pozitia de sfarsit
*/

void Citeste();
void Dinamic();
void Scrie();

int main()
{
	Citeste();
	Dinamic();
	Scrie();
	return 0;
}

void Citeste()
{
	ifstream f("secv2.in");
	f >> n>>lung;
	for ( int i = 1; i <= n; i++ )
		f >> x[i];
	f.close();
}

void Scrie()
{
	ofstream g("secv2.out");

	if ( smax > 0 ) g << i<<" " <<j<<" "<< smax;

    
	g.close();
}

void Dinamic()
{
	s = 0; smax = 0;
	i1 = 1;
	for ( k = 1; k <= n; k++ )

		if ( x[k] + s > smax )

		{
			s += x[k];

			smax = s;

			i = i1;

			j = k;
		}
		else

			if ( x[k] + s > 0 ) // numerele negative se iau in secventa

				s += x[k];      // numai daca ea nu devine 0 sau < 0

			else

			{

				s = 0;

				i1 = k + 1;
			}

}