Pagini recente » Cod sursa (job #579335) | Cod sursa (job #876022) | Cod sursa (job #3140577) | Cod sursa (job #1990313) | Cod sursa (job #447286)
Cod sursa(job #447286)
#include<cstdio>
int m ;
const int NMAX = 1 << 16 ;
int x [NMAX],v[NMAX],pred[NMAX];
int caut ( int q )
{
int i , pas = 1 << 16 ;
for ( i = 0 ; pas ; pas >>= 1 )
if ( i+pas <= m && v[x[i+pas]]<q )
i += pas ;
return 1+i;
}
int main ()
{
freopen ( "scmax.in" , "r" , stdin ) ;
freopen ( "scmax.out" , "w" , stdout ) ;
int n , i , p ;
scanf ( "%d" , &n ) ;
for ( i = 1 ; i <= n ; ++ i )
scanf ( "%d" , & v[i] ) ;
m=0;
x[++m]=1;
for ( i = 2 ; i <= n ; ++ i )
{
p = caut ( v[i] ) ;
if ( p > m )
++ m ;
x[p]=i;
pred[i]=x[p-1];
}
printf ( "%d\n" , m ) ;
for ( i = 1 ; i <= m ; ++ i )
printf ( "%d " , v[x[i]] ) ;
return 0 ;
}