Pagini recente » Cod sursa (job #447312) | Cod sursa (job #1648190) | Cod sursa (job #2483842) | Cod sursa (job #494774) | Cod sursa (job #2483692)
#include <cstdio>
using namespace std;
int n,best[100002],sir[100003],v[100003],maxim,poz,kontor=1,variabila;
int cautare_binara_dinaiajmen (int last,int nr)
{
int step=1,i=0;
for(;(step<<1)<=kontor;step=(step<<1));
for(;step>0;step=(step>>1))
if(sir[i+step]<nr && i+step<=kontor)
i+=step;
return i;
}
void scmax ()
{
sir[1]=v[1];best[1]=1;
for(int i=2;i<=n;++i)
{
variabila=cautare_binara_dinaiajmen(kontor,v[i])+1;
if(variabila-1==kontor)
sir[++kontor]=v[i];
else
sir[variabila]=v[i];
best[i]=variabila;
if(best[i]>maxim)
maxim=best[i],poz=i;
}
}
int main ()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d", &n);
for(int i=1;i<=n;++i)
scanf("%d", &v[i]);
scmax();
printf("%d\n", maxim);
sir[maxim]=v[poz];int aux=maxim;
for(int i=poz-1;i>0 && maxim>0;--i)
if(best[i]==maxim-1 && v[i]<sir[maxim])
sir[--maxim]=v[i];
for(int i=1;i<=aux;++i)
printf("%d ", sir[i]);
return 0;
}