Pagini recente » Cod sursa (job #238567) | Cod sursa (job #270587) | Cod sursa (job #1015974) | Cod sursa (job #2920684) | Cod sursa (job #398806)
Cod sursa(job #398806)
#include<stdio.h>
long v[100005],q[100005],p[100005],n,i,x,l;
int cauta(long val,int low,int hi)
{int mid=(low+hi)/2;
if(hi==low)
return hi;
if(val<q[mid])
return cauta(val,low,mid);
return cauta(val,mid+1,hi);
}
int main()
{ freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
scanf("%ld",&v[i]);
long max=-1;
for(i=1;i<=n;i++)
{ if(v[i]>max)
{ max=v[i];
q[++l]=max;
p[i]=l;
}
else
{ x=cauta(v[i],1,l);
q[x]=v[i];
p[i]=x;
if(x==l)
max=v[i];
}
}
long nr=l;
for(i=n;nr>=1;i--)
if(p[i]==nr)
{ q[nr]=v[i];
nr--;
}
printf("%ld\n",l);
for(i=1;i<=l;i++)
printf("%ld ",q[i]);
return 0;
}