Pagini recente » Borderou de evaluare (job #1768783) | Borderou de evaluare (job #1806247) | Borderou de evaluare (job #2039487) | Borderou de evaluare (job #1816650) | Cod sursa (job #491403)
Cod sursa(job #491403)
#include <cstdio>
int n,v[1<<17],x[1<<17],pred[1<<17],nr;
void citire()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)
scanf("%d",v+i);
}
int cb(int q)
{
int i,pas=1<<17;
for(i=0;pas;pas>>=1)
if(i+pas<=nr && v[x[i+pas]]<q)
i+=pas;
return 1+i;
}
void work()
{
int p;
for(int i=1;i<=n;++i)
{
p=cb(v[i]);
pred[i]=x[p-1];
if(p>nr)
++nr;
x[p]=i;
}
}
void refac(int p)
{
if(p==0)
return;
refac(pred[p]);
printf("%d ",v[p]);
}
int main()
{
citire();
work();
printf("%d\n",nr);
refac(x[nr]);
return 0;
}