Pagini recente » Cod sursa (job #668429) | Cod sursa (job #869869) | Cod sursa (job #1818271) | Cod sursa (job #1606933) | Cod sursa (job #1075949)
#include <stdio.h>
#define NMax 100010
const char IN[] = "scmax.in", OUT[] = "scmax.out";
int N, L;
int v[NMax], P[NMax], Q[NMax], sol[NMax];
int search( int x ) {
int i, step;
for ( step = 1; step < L; step <<= 1);
for ( i = L + 1; step; step >>= 1)
if ( i - step > 0 && x < Q[i - step] )
i -= step;
return i;
}
int main() {
freopen(IN, "r", stdin);
scanf("%d", &N);
for ( int i = 1; i <= N; ++ i)
scanf("%d", v + i);
fclose(stdin);
for ( int i = 1; i <= N; ++ i) {
int poz = search( v[i] );
if ( poz > 1 && Q[poz - 1] == v[i]) continue;
if ( poz == L + 1 ) ++ L;
Q[poz] = v[i];
P[i] = poz;
}
for ( int i = N, l = L; i > 0; -- i)
if ( P[i] == l ) {
sol[l] = v[i];
-- l;
}
freopen(OUT, "w", stdout);
printf("%d\n", L);
for ( int i = 1; i <= L; ++ i)
printf("%d ", sol[i]);
printf("\n");
return 0;
}