Pagini recente » Cod sursa (job #3197380) | Cod sursa (job #2817321) | Cod sursa (job #268726) | Cod sursa (job #3244809) | Cod sursa (job #309817)
Cod sursa(job #309817)
#include <stdio.h>
long b[100002],c[100002];
long cautbin (long a[],long st,long dr,long x)
{long ok,pivot;
long m;
while (st<=dr)
{m=(st+dr)/2;
pivot=a[m];
if (x>pivot)
st=m+1;
else
if (x<pivot)
dr=m-1;
else
return m;
}
return st;
}
long u;
long p[100002],q[100002];
void cmlsc (long k,long v[])
{long st,i,poz;
st=1;
i=2;
u=1;
p[1]=v[1];
q[1]=1;
while (i<=k)
{if (v[i]>p[u])
{q[i]=u+1;
p[++u]=v[i++];
}
else
{poz=cautbin(p,st,u,v[i]);
p[poz]=v[i];
q[i]=poz;
i++;
}
}
}
void final (long d[],long e[],long k)
{ long j,lim,i;
j=u;
lim=k;
while (u!=0)
{for (i=lim;i>=1;i--)
{if (q[i]==u)
{d[u]=e[i];
u--;
lim=i-1;
}
}
}
}
int main()
{ freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
long n,i,lmax;
scanf ("%ld",&n);
for (i=1;i<=n;i++)
scanf ("%ld",&b[i]);
cmlsc (n,b);
lmax=u;
printf ("%ld\n",lmax);
final (c,b,n);
for (i=1;i<=lmax;i++)
printf ("%ld ",c[i]);
fcloseall();
return 0;
}