Pagini recente » Cod sursa (job #865113) | Cod sursa (job #2059480) | Cod sursa (job #275348) | Cod sursa (job #1546848) | Cod sursa (job #333032)
Cod sursa(job #333032)
#include<stdio.h>
long n,i,v[100010],q[100010],p[100010],k,lmax,pr[100010];
void read()
{
scanf("%ld",&n);
for(i=1;i<=n;++i) scanf("%ld",&v[i]);
}
long cautbin(long n,long a)
{
long st, dr, m, u=0;
st=1;dr=n;
while(st<=dr)
{
m=(st+dr)/2;
if(a<=q[m])
{
u=m;
dr=m-1;
}
else st=m+1;
}
return u;
}
void print()
{
lmax=k; long t=0;
for(i=n;i>=1;--i)
{
if(p[i]==lmax)
pr[++t]=v[i],lmax--;
}
printf("%ld\n",k);
for(i=t;i>=1;--i)
printf("%ld ",pr[i]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
read();
q[1]=v[1];
p[1]=1;
k=1;
for(i=2;i<=n;++i)
{
p[i]=cautbin(k,v[i]);
if(p[i]==0) k++,p[i]=k;
q[p[i]]=v[i];
}
print();
return 0;
}