Pagini recente » Cod sursa (job #1511615) | Cod sursa (job #233207) | Cod sursa (job #289062) | Cod sursa (job #1660832) | Cod sursa (job #291842)
Cod sursa(job #291842)
#include<stdio.h>
#include<string.h>
long n,num,lmax,a[100001],p[100001],q[100001];
long binary_search(long x)
{
long st,dr,m;
st=1;
dr=num;
while(st<=dr)
{
m=(st+dr)/2;
if(q[m]==x)
return m;
if(q[m]<x)
st=m+1;
else
dr=m-1;
}
return st;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
long i,poz,k=1;
scanf("%ld",&n);
for(i=1;i<=n;++i)
scanf("%ld",&a[i]);
q[1]=a[1];
p[1]=1;
num=1;
for(i=2;i<=n;++i)
{
poz=binary_search(a[i]);
if(q[poz]==0)
num++;
q[poz]=a[i];
p[++k]=poz;
if(poz>lmax)
lmax=poz;
}
printf("%ld\n",lmax);
memset(q,0,sizeof(q));
int l=0;
for(i=k;i>=1;--i)
{
if(p[i]==lmax)
{
q[++l]=a[i];
lmax--;
}
}
for(i=l;i>=1;--i)
printf("%ld ",q[i]);
printf("\n");
return 0;
}