Pagini recente » Cod sursa (job #667829) | Cod sursa (job #108128) | Cod sursa (job #3184502) | Cod sursa (job #2869075) | Cod sursa (job #509060)
Cod sursa(job #509060)
#include<stdio.h>
int v[100001],q[100001],p[100001],sol[100001],i,n,pos,l,poslmax;
int pune(int x,int st,int dr)
{
int m=(st+dr)/2;
if(st==dr)
{
q[st]=x;
return st;
}
if(x<=q[m]) return pune(x,st,m);
return pune(x,m+1,dr);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&v[i]);
l=0;
for(i=0;i<n;i++)
{
pos=pune(v[i],0,l+1);
p[i]=pos;
if(pos>l)
{
l=pos;
poslmax=i;
}
}
printf("%d\n",l);
int posct=poslmax;
for(i=l;i>=1;i--)
{
while (p[posct]!=i) posct--;
sol[++sol[0]]=v[posct];
}
for(i=sol[0];i>0;i--) printf("%d ",sol[i]);
return 0;
}