Cod sursa(job #505533)

Utilizator girl_styleBianca Boeriu girl_style Data 2 decembrie 2010 20:17:28
Problema Subsir crescator maximal Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream> 

using namespace std;

#include <fstream> 

long n;
long valori[100003],cresc[100003];
long nr;

void citire()
{
	fstream f("scmax.in",ios::in);
	f>>n;
	for (int i = 0 ; i < n ; i ++ )
	{
		f>>valori[i];
	}
	f.close();
}

long cauta_loc(long x)
{
	long first = 0 ;
	long last = nr ;
	long middle = (first+last)/2;
	while (first <= last )
	{
		if ( cresc[middle] < x && x <= cresc[middle+1] )
		{
			return middle ;
		}
		else
		if (cresc[middle] < x)
			first = middle + 1 ;
		else
			last = middle - 1 ;
		middle = (first + last)/2;
	}
	return nr;
}

void subsir()
{
	long loc ;
	cresc[1]=valori[0];
	for (int i = 1 ; i < n ; i ++ )
	{
		loc = cauta_loc(valori[i]);
		cresc[loc+1] = valori[i];
		if (nr < loc + 1) nr = loc + 1;
	}
	fstream g("scmax.out",ios::out);
	g<<nr<<endl;
	for (int i = 1 ; i <= nr ; i++)
		g<<cresc[i]<<" ";
	g.close();
}

int main()
{
	citire();
	subsir();
	return 0;
}