Pagini recente » Cod sursa (job #1708909) | Cod sursa (job #3166284) | Cod sursa (job #2895229) | Cod sursa (job #880594) | Cod sursa (job #2483689)
#include <cstdio>
using namespace std;
long long n,best[10002],sir[10003],v[100003],maxim,poz,kontor=1,variabila;
int cautare_binara_dinaiajmen (int last,int nr)
{
int step=1,i=0;
for(;(step<<1)<=n;step=(step<<1));
for(;step>0;(step=step>>1))
if(v[i+step]<nr)
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;
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("%lld", &n);
for(int i=1;i<=n;++i)
scanf("%lld", &v[i]);
scmax();
printf("%lld\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("%lld ", sir[i]);
return 0;
}