Pagini recente » Cod sursa (job #1131998) | Cod sursa (job #1053143) | Cod sursa (job #2027611) | Cod sursa (job #2603371) | Cod sursa (job #1070471)
/*
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]);
}