Pagini recente » Cod sursa (job #2489571) | Cod sursa (job #975890) | Cod sursa (job #1836495) | Cod sursa (job #825635) | Cod sursa (job #393950)
Cod sursa(job #393950)
#include<cstdio>
int n,a[100001],pred[100001],vec[100001],x[100001];
int scan(int poz)
{
int i=0,pas=1<<17;
for(i=0;pas;pas>>=1)
if(x[0]>=i+pas && a[x[i+pas]]<poz)
i+=pas;
return i+1;
}
void scrie(int poz)
{
if(pred[poz])
scrie(pred[poz]);
printf("%d ",a[poz]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
int j;
x[++x[0]]=1;
for(int i=2;i<=n;i++)
{
j=scan(a[i]);
if(j>x[0])
++x[0];
x[j]=i;
if(j!=1)
pred[i]=x[j-1];
else pred[i]=0;
}
printf("%d\n",x[0]);
scrie(x[x[0]]);
return 0;
}