Cod sursa(job #568369)

Utilizator loginLogin Iustin Anca login Data 31 martie 2011 09:33:44
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
# include <fstream>
# include <iostream>
# define DIM 100003
using namespace std;
int n, v[DIM], w[DIM], l[DIM], t[DIM], lmax, p;

void f (int st, int dr, int x)
{
	if (st==dr)
	{
		if (v[l[st]]<x)
			p=st;
		return;
	}
	int mij=(st+dr)/2;
	if (v[l[mij]]<x)
	{
		p=mij;
		f(mij+1, dr, x);
	}
	else
		f(st, mij, x);
}

int main ()
{
	ifstream fin ("scmax.in");
	ofstream fout ("scmax.out");
	fin>>n;
	for(int i=1;i<=n;++i)
		fin>>v[i];
	for(int i=1;i<=n;++i)
	{
		f(0, lmax, v[i]);
		if (l[p+1]==0)l[++lmax]=i, t[i]=l[p];
		else l[p+1]=i, t[i]=l[p];
	}
	int poz=lmax;
	fout<<lmax<<"\n";
	for(int i=l[lmax];i;i=t[i])
		w[poz--]=v[i];
	for(int i=1;i<=lmax;++i)
		fout<<w[i]<<" ";
	return 0;
}