Pagini recente » Istoria paginii utilizator/stay_awake77 | Statistici Macovei Cristian (cristi_macovei) | Profil Le_Account | Cod sursa (job #561314) | Cod sursa (job #503996)
Cod sursa(job #503996)
#include<stdio.h>
int pred[100001], x[100001],v[100001];
int max,n;
void subsir(int p)
{
if(pred[p])
subsir(pred[p]);
printf("%d ",v[p]);
}
int caut(int val)
{
int i,pos=1<<16;
for(i=0; pos!=0; pos/=2)
if ((i+pos)<=max && v[x[i+pos]]<val)
i+=pos;
return i+1;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
x[1]=1; max=1;
for(i=2;i<=n;i++)
{
j=caut(v[i]);
if(j>max)
max++;
x[j]=i;
pred[i]=x[j-1];
}
printf("%d\n", max);
subsir(x[max]);
return 0;
}