Pagini recente » Cod sursa (job #2791817) | Cod sursa (job #577337) | Cod sursa (job #495386) | Cod sursa (job #2636951) | Cod sursa (job #1673103)
#include <cstdio>
#define DIM 100005
using namespace std;
int v[DIM], poz[DIM], indi[DIM], best[DIM];
int m;
int caut( int x );
void afis( int k );
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n, i, j, s, t, d, k;
scanf("%d",&n);
for( i = 1; i <= n; ++i ){
scanf("%d",&v[i]);
}
indi[1] = best[1] = m = 1;
for( i = 2; i <= n; ++i ){
k = caut( v[i] );
indi[k+1] = i;
best[i] = k + 1;
poz[i] = indi[k];
if( k + 1 > m ) m++;
}
printf("%d\n",m);
k = m = 0;
for( i = 1; i <= n; ++i ){
if( best[i] > m ){
m = best[i];
k = i;
}
}
afis( k );
return 0;
}
int caut( int x ){
int i = 0;
int pas = (1<<17);
while( pas ){
if( i + pas <= m && v[indi[i+pas]] < x ) i += pas;
pas /= 2;
}
return i;
}
void afis( int k ){
if( poz[k] == 0 ){
printf("%d ",v[k]);
return ;
}
afis(poz[k]);
printf("%d ",v[k]);
}