Cod sursa(job #748290)

Utilizator NitaMihaitavoidcube NitaMihaita Data 12 mai 2012 22:58:41
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.63 kb
#include<fstream>
using namespace std;
int v[100001],u[100001],L[100001],l;
ifstream f("scmax.in");
ofstream g("scmax.out");
int functie(int i,int j,int x)
{
int m;
if(i>j)return l;
m=(i+j)/2;
if(v[L[m]]<x and x<=v[L[m+1]])return m;
else if(x>v[L[m+1]])return functie(m+1,j,x);
else return functie(i,m-1,x);
}
void dr(int i)
{
if(i)
	{
	dr(u[i]);
	g<<v[i]<<" ";
	}
}
int main ()
{
int n,i,ret,max,poz=1;
f>>n;
for(i=1;i<=n;++i)
	f>>v[i];
L[1]=1;
l=1;
for(i=2;i<=n;++i)
	{
	ret=functie(0,l,v[i]);
	u[i]=L[ret];
	L[ret+1]=i;
	if(l<ret+1){l=ret+1;poz=i;}
	}
g<<l<<"\n";
dr(poz);
f.close();
g.close();
}