Pagini recente » Cod sursa (job #1486448) | Cod sursa (job #476817) | Cod sursa (job #2488971) | Cod sursa (job #726547) | Cod sursa (job #503776)
Cod sursa(job #503776)
#include <stdio.h>
int n,nr=1,max,v[100001],d[100001],p[100001],l[100001];
void w(int a)
{
if (p[a]>0) w(p[a]);
printf("%d ",v[a]);
}
int bs(int key)
{
int st,dr,mid;
st=0;dr=nr;mid=(st+dr)/2;
while (st<=dr)
{
if ((v[l[mid]]<key)&&(v[l[mid+1]]>=key)) return mid;
else if (v[l[mid+1]]<key) {st=mid+1;mid=(st+dr)/2;}
else {dr=mid-1;mid=(st+dr)/2;}
}
return nr;
}
int main()
{
int a,i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i) scanf("%d",&v[i]);
d[1]=1;l[1]=1;
for (i=2;i<=n;++i)
{
a=bs(v[i]);
p[i]=l[a];
d[i]=a+1;
l[a+1]=i;
if (nr<a+1) nr=a+1;
}
max=0;a=0;
for (i=1;i<=n;++i) if (max<d[i]) {max=d[i];a=i;}
printf("%d\n",max);
w(a);
return 0;
}