Pagini recente » Cod sursa (job #344494) | Cod sursa (job #429605) | Cod sursa (job #698410) | Cod sursa (job #2549779) | Cod sursa (job #1670212)
#include <cstdio>
#define DIM 100005
using namespace std;
int v[DIM], D[DIM], L[DIM], P[DIM];
int m;
void afisare( int k ){
if( P[k] == 0 ){
printf("%d ",v[k]);
return ;
}
afisare( P[k] );
printf("%d ",v[k]);
}
int caut( int k ){
int pas = 1 << 17;
int i = 0;
while( pas ){
if( i + pas <= m && v[D[i+pas]] < k ) i += pas;
pas /= 2;
}
return i;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n, i, j, s, t, d, k, ma;
scanf("%d",&n);
for( i = 1; i <= n; ++i ){
scanf("%d",&v[i]);
}
L[1] = D[1] = m = 1;
for( i = 2; i <= n; ++i ){
k = caut( v[i] );
L[i] = k + 1;
D[k+1] = i;
P[i] = D[k];
if( k + 1 > m ) m++;
}
ma = 0;
for( i = 1; i <= n; ++i ){
if( ma < L[i] ){
ma = L[i];
k = i;
}
}
printf("%d\n",m);
afisare( k );
return 0;
}