Pagini recente » Cod sursa (job #2015333) | Cod sursa (job #821391) | Cod sursa (job #2225245) | Cod sursa (job #695079) | Cod sursa (job #1424744)
#include<cstdio>
#include<algorithm>
#include<cstring>
#define Nmax 100005
using namespace std;
int n,i,j,v[Nmax],k,p;
int ultim[Nmax],nr,w[Nmax];
int cb(int x)
{
int i=0,pas=1<<16;
while (pas!=0)
{
if (i+pas<=nr && v[ultim[i+pas]]<x)
i+=pas;
pas/=2;
}
return i+1;
}
int sol[Nmax];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
{
scanf("%d",&v[i]);
if (i==1)
{
ultim[++nr]=i;
k = i;
continue ;
}
if (v[i]>v[ultim[nr]])
{
w[i]=ultim[nr];
ultim[++nr]=i;
k=i;
}else
{
p=cb(v[i]);
// if (p==0) ++p;
ultim[p]=i;
w[i]=ultim[p-1];
}
}
printf("%d\n",nr);
while (k)
{
sol[++sol[0]]=v[k];
k=w[k];
}
for (i=sol[0];i>=1;--i)
printf("%d ",sol[i]);
return 0;
}