Pagini recente » Cod sursa (job #243439) | Cod sursa (job #231137) | Cod sursa (job #425180) | Cod sursa (job #1919733) | Cod sursa (job #403504)
Cod sursa(job #403504)
#include <fstream>
using namespace std;
const char* in = "scmax.in";
const char* out = "scmax.out";
const int NMAX = 100005;
int A[NMAX], P[NMAX], cnt, poz[NMAX];
int N;
int main( void )
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
scanf ( "%d", &N );
int i, bl, br, bm, last;
for ( i = 1; i <= N; scanf("%d", A+i++ ) );
for ( i = 1; i <= N; ++i )
{
if ( A[i] > P[cnt] )
P[++cnt] = A[i], poz[i] = cnt;
else
{
for ( bl = 1, br = cnt, last = cnt; bl <= br; )
{
bm = (bl+((br-bl)>>1));
if ( P[bm] < A[i] ) bl = bm + 1;
else last = bm, br = bm - 1;
}
P[last] = A[i], poz[i] = last;
}
}
printf ( "%d\n", cnt );
for ( i = N, last = 0; i >= 1 && cnt; --i )
if ( poz[i] == cnt )
P[++last] = A[i], --cnt;
for ( i = last; i; --i )
printf ( "%d ", P[i] );
return 0;
}