Pagini recente » Cod sursa (job #2548789) | Cod sursa (job #1146943) | Cod sursa (job #705088) | Cod sursa (job #858281) | Cod sursa (job #1070470)
/*
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 = 0;
while ( left<=right )
{
mid = (left+right)/2;
if( mid == L && v[M[mid]] <= v[x] ) return L;
if( v[M[mid]]<v[x] && v[x]<=v[mid+1]) return mid;
if ( v[M[mid+1]] < v[x] )
left = mid+1;
else
right = mid-1;
}
return 0;
}
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]);
}