Cod sursa(job #1070471)

Utilizator roby2001Sirius roby2001 Data 1 ianuarie 2014 06:42:15
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
/*
    Keep It Simple!
*/
 
#include<stdio.h>

#define Max_N 100002
#define max(a,b) a>b ? a:b

int n,v[Max_N],M[Max_N],P[Max_N],L;

void Print(int x)
{
	if( P[x] ) Print( P[x] );
	 printf("%d ", v[x]);
}

int BinarySearch(int x)
{
	int left = 1, right = L,mid = (left+right)/2;

	while ( left<=right )
	{
		mid = (left+right)/2;
		if( v[M[mid]] <= v[x] ) 
			left = mid + 1;
		else
			right = mid - 1;
	}
	if(v[M[mid]]>=v[x])
		mid--;
	return mid;
}

int main()
{
	freopen("scmax.in","r",stdin);
	freopen("scmax.out","w",stdout);

	scanf("%d",&n);

	for(int i=1; i<=n; i++)
	    scanf("%d",&v[i]);

	int j;

	for(int i=1; i<=n; i++)
	{
		j = BinarySearch(i);

		P[i] = M[j];

		if( j == L || v[i] < v[M[j+1]] )
		{
			M[j+1] = i;
			L = max(L,j+1);
		}
	}

	printf("%d\n",L);
    Print(M[L]);
}