Pagini recente » Cod sursa (job #881673) | Cod sursa (job #1070113) | Cod sursa (job #2749711) | Cod sursa (job #2561537) | Cod sursa (job #430582)
Cod sursa(job #430582)
#include <stdio.h>
#define Nmax 100100
int n,p[Nmax],q[Nmax],v[Nmax];
int insert(int x)
{
int st=1,dr=q[0],rez=0,mid;
while(st<=dr)
{
mid=(st+dr)/2;
if(q[mid]>=x)
{
rez=mid;
dr=mid-1;
}
else
st=mid+1;
}
if(rez)
{
q[rez]=x;
return rez;
}
else
{
q[++q[0]]=x;
return q[0];
}
}
void afiseaza(int x,int l)
{
int i;
if(l==0)
return ;
for(i=x;i>=1;--i)
{
if(p[i]==l)
{
afiseaza(i-1,l-1);
printf("%d ",v[i]);
return ;
}
}
}
int main()
{
int i;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i)
scanf("%d",&v[i]);
for(i=1;i<=n;++i)
p[i]=insert(v[i]);
printf("%d\n",q[0]);
afiseaza(n,q[0]);
return 0;
}