Pagini recente » Cod sursa (job #1555646) | Cod sursa (job #677732) | Cod sursa (job #1185613) | Cod sursa (job #205360) | Cod sursa (job #383795)
Cod sursa(job #383795)
#include<cstdio>
const int N = 100000;
//const unsigned int NN=(unsigned int)1<<31;
int v[N],x[N],pred[N],n,m,fin[N];
int caut(int val)
{
int i;
unsigned int step=1;
for (step = 1; step < m; step <<= 1);
for (i = 0; step; step >>= 1)
if (i + step <= m && v[x[i + step]] < val)
i += step;
++i;
return i;
}
int main()
{
int i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
x[1]=1;
pred[1]=0;
m=1;
for(i=2;i<=n;++i)
{
int j=caut(v[i]);
if(j > m)
++m;
x[j]=i;
pred[j]=x[j-1];
}
fin[m]=v[x[m]];
for(i=m-1;i>=1;--i)
fin[i]=v[pred[i+1]];
printf("%d\n",m);
for(i=1;i<=m;++i)
printf("%d ",fin[i]);
return 0;
}