Pagini recente » Cod sursa (job #2817344) | Cod sursa (job #2287690) | Cod sursa (job #485930) | Cod sursa (job #2055096) | Cod sursa (job #2787798)
#include <iostream>
using namespace std;
const int N = 100000;
int last [ N ], v [ N ], s [ N ], secv [ N ];
int main( ) {
ifstream fin ( "scmax.in" );
ofstream fout ( "scmax.out" );
int n, i, st, dr, mij, k;
fin >> n;
for ( i = 0; i < n; i++ )
fin >> v[ i ];
last [ 0 ] = v [ 0 ];
k = 1;
for ( i = 1; i < n; i++ ){
st = 0;
dr = k;
while ( dr - st > 1 ){
mij = ( dr + st ) / 2 ;
if( last [ mij ] < v [ i ] )
st = mij;
else
dr = mij;
}
if ( v [ i ] <= last [ st ] ){
last [ st ] = v [ i ];
s [ i ] = st;
}
else{
last [ st + 1 ] = v [ i ];
s [ i ] = st + 1;
if ( st == k - 1 )
k++;
}
}
fout << k << "\n";
st = k;
i = n - 1;
k--;
while ( v[ i ] != last [ k ] )
i--;
secv [ k ] = v[ i ];
k--;
while ( i >= 0 ){
if ( v[ i ] < last [ k + 1 ] && s[ i ] == k ){
secv [ k ] = v[ i ];
k--;
}
i--;
}
for ( i = 0; i < st; i++ )
fout << secv [ i ] << " ";
return 0;
}