Pagini recente » Cod sursa (job #2344295) | Cod sursa (job #2109206) | Cod sursa (job #1029300) | Cod sursa (job #1971721) | Cod sursa (job #1728609)
#include <cstdio>
#define NMax 100005
int V[NMax];
int P[NMax];
int Q[NMax];
int i,n,lgmax;
void Read()
{
scanf("%d",&n);
for( int i = 1; i <= n; ++i ) scanf("%d",&V[i]);
}
void Write()
{
int i,K;
printf("%d\n",lgmax);
for( K = n ,i = lgmax; i >= 1; --i )
{
while( P[K] != i ) --K;
Q[i] = V[K];
}
for( i = 1; i <= lgmax; ++i ) printf("%d ",Q[i]);
}
void Solve()
{
int i,st,dr,mid,pos;
lgmax = 0;
for( i = 1; i <= n; ++i )
{
for( pos = -1, st = 1, dr = lgmax; st <= dr; )
{
mid = (st+dr)/2;
if( V[i] > Q[mid] ) st = mid + 1;
else { pos = mid; dr = mid - 1; }
}
if( pos == -1 ) { Q[++lgmax] = V[i]; P[i] = lgmax; }
else { Q[pos] = V[i]; P[i] = pos; }
}
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
Read();
Solve();
Write();
return 0;
}