Pagini recente » Cod sursa (job #1492196) | Cod sursa (job #73550) | Cod sursa (job #2816806) | Cod sursa (job #1206705) | Cod sursa (job #252140)
Cod sursa(job #252140)
#include <stdio.h>
int a[100003],best[100003],p[100003],q[100003],n,i,j,k,l;
int Insert(int x,int Lo,int Hi)
{
int Mid=(Lo+Hi)/2;
if (Lo==Hi)
{ if (Hi>l) q[++l+1]=30000;
q[Lo]=x;
return Lo;
}
else if (x<q[Mid]) return Insert(x,Lo,Mid);
else if (x>q[Mid]) return Insert(x,Mid+1,Hi);
else return Mid;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&a[i]);
l=0;q[1]=30000;
for (i=1;i<=n;++i)
p[i]=Insert(a[i],1,l+1);
k=l;
for (i=n;k>=1;--i)
if (p[i]==k)
{
best[k]=a[i];
--k;
}
printf("%d\n",l);
for (i=1;i<=l;++i)
printf("%d ",best[i]);
fclose(stdin);
fclose(stdout);
return(0);
}