Cod sursa(job #503613)

Utilizator catalin93Catalin Ionescu catalin93 Data 23 noiembrie 2010 21:30:31
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
// Buguri rezolvate de Prof. Dr. Copoiu Liviu (aka fotbalistu') :D
// Raman dator! :)

#include <stdio.h>
const int maxn=100001;
int i,j,n,max,pmax,v[maxn],x[maxn],pred[maxn];
void subsir(int p) // Reconstructia Sirului
{
	if(pred[p])
		subsir(pred[p]);
	printf("%d " ,v[p]);
}
int caut(int val) // Cautarea Binara
{
	int i, pas=1<<16;
	for(i=0;pas!=0;pas/=2)
		if(i+pas<=max && v[x[i+pas]] < val)
			i+=pas;
	return 1+i;
}
int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&v[i]);
	x[1] = 1;
	max = 1;
	for(i=2;i<=n;i++)
	{
		j = caut(v[i]);
		if(j > max) 
			++max;
		x[j] = i;
		pred[i] = x[j-1];
		
	}
	
	printf( "%d\n",max);
	subsir(x[max]);
	return 0;
}