Pagini recente » Cod sursa (job #366064) | Cod sursa (job #243609) | Monitorul de evaluare | Cod sursa (job #174791) | Cod sursa (job #1291744)
#include <iostream>
#include <cstdio>
#define n_max 100001
using namespace std;
int n , v[n_max] , L[n_max] , mrm = 0 ;
void citire() ;
void dinamica() ;
int main()
{
freopen( "scmax.in" , "r" , stdin ) ;
freopen( "scmax.out" , "w" , stdout ) ;
citire() ;
dinamica() ;
return 0;
}
void citire()
{
scanf( "%d" , &n ) ;
for ( int i = 1 ; i <= n ; i ++ )
scanf( "%d" , &v[i] ) ;
}
void dinamica()
{
for ( int i = 1 ; i <= n ; i ++ )
{
int st = 1 , dr = mrm ;
while ( st <= dr )
{
int m = st + ( dr - st ) / 2 ;
if ( v[i] < v[L[m]] )
dr = m - 1 ;
else
st = m + 1 ;
}
if ( st > mrm && v[i] > v[L[mrm]] )
L[++mrm] = i ;
else if ( v[L[st]] > v[i] )
L[st] = i ;
}
printf( "%d\n" , mrm ) ;
for ( int i = 1 ; i <= mrm ; i ++ )
printf( "%d " , v[L[i]] ) ;
}