Pagini recente » Cod sursa (job #183838) | Cod sursa (job #2364548) | Cod sursa (job #704741) | Cod sursa (job #412830) | Cod sursa (job #393945)
Cod sursa(job #393945)
#include<cstdio>
int m,n,a[100010],lung[100010],pred[100010],sol[100010],x[100010];
int cb(int b)
{
int i,pas;
for(pas=1;pas<=m;pas<<=1);
for(i=0;pas!=0;pas>>=1)
if(i+pas<=m && a[x[i+pas]]<b)
i+=pas;
return i+1;
}
void scrie(int poz)
{
if(pred[poz])
scrie(pred[poz]);
printf("%d ",a[poz]);
}
int main()
{
int i,j;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
m=1;
x[1]=1;
for(i=2;i<=n;i++)
{
j=cb(a[i]);
if(j>m)
++m;
x[j]=i;
pred[i]=x[j-1];
}
printf("%d\n",m);
scrie(x[m]);
return 0;
}