Pagini recente » Cod sursa (job #3185693) | Cod sursa (job #1502269) | Cod sursa (job #876188) | Cod sursa (job #220638) | Cod sursa (job #1831770)
#include <cstdio>
using namespace std;
#define NMAX 100005
int v[ NMAX ],
A[ NMAX ],
D[ NMAX ],
T[ NMAX ];
int cauta ( int n, int k ) {
int i, pas;
pas = 1 << 17;
i = 0;
while ( pas ) {
if ( i + pas <= n && v[ A[ i + pas ] ] < k )
i += pas;
pas /= 2;
}
return i;
}
void afis ( int p ) {
if ( p == 0 ) return ;
afis( T[ p ] );
printf("%d ",v[ p ]);
}
int main () {
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int N, M, i, j, x, y, z, id, maxim;
M = 0;
scanf("%d",&N);
for ( i = 1; i <= N; ++i ) {
scanf("%d",&v[ i ]);
id = cauta ( M, v[ i ] );
D[ i ] = id + 1;
T[ i ] = A[ id ];
A[ id + 1 ] = i;
if ( id + 1 > M ) M++;
}
id = 1;
for ( i = 1; i <= N; ++i ) {
if ( D[ i ] > D[ id ] )
id = i;
}
printf("%d\n",D[ id ]);
afis ( id );
return 0;
}