Pagini recente » Cod sursa (job #2225496) | Cod sursa (job #124137) | Cod sursa (job #89717) | Cod sursa (job #8696) | Cod sursa (job #1375285)
#include <iostream>
#include <cstdio>
#define n_max 100069
using namespace std;
int v[n_max],sol[n_max],l[n_max],n,k;
void citire()
{
scanf( "%d" , &n ) ;
for ( int i = 1 ; i <= n ; i ++ )
scanf( "%d" , &v[i] ) ;
}
void dina()
{
for ( int i = 1 ; i <= n ; i ++ )
if ( v[i] > sol[k] )
{
sol[++k] = v[i] ;
l[i] = k ;
}
else
{
int st = 1 , dr = k , m , pos = k ;
while ( st <= dr )
{
m = st + ( dr - st ) / 2 ;
if ( sol[m] < v[i] )
st = m + 1 ;
else
{
pos = m ;
dr = m - 1 ;
}
}
sol[pos] = v[i] ;
l[i] = pos ;
}
printf( "%d\n" , k ) ;
int p = 0 ;
for ( int i = n ; i > 0 && k ; i -- )
if ( l[i] == k )
{
sol[++p] = v[i] ;
k -- ;
}
for ( int i = p ; i > 0 ; i -- )
printf( "%d " , sol[i] ) ;
}
int main()
{
freopen( "scmax.in" , "r" , stdin ) ;
freopen( "scmax.out" , "w" , stdout ) ;
citire() ;
dina() ;
return 0;
}