Pagini recente » Cod sursa (job #1674286) | Cod sursa (job #53259) | Cod sursa (job #827157) | Cod sursa (job #2999761) | Cod sursa (job #1145965)
#include <cstdio>
using namespace std;
long n,i,j,k,nr,max,a[100001],b[100001],p[100001],l[100001];
int cbin(int x)
{
int p, u, m;
p=0;
u=nr;
m=(p+u)/2;
while (p <= u)
{
if (a[l[m]]<x&&a[l[m+1]]>=x) return m;
else if (a[l[m+1]]<x)
{
p=m+1;
m=(p+u)/2;
}
else
{
u=m-1;
m=(p+u)/2;
}
}
return nr;
}
void afis(int x)
{
if(p[x]>0)afis(p[x]);
printf("%d ",a[x]);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
max=1;
b[1]=1;
l[1]=1;
for(i=1;i<=n;i++)
{
k=cbin(a[i]);
p[i]=l[k];
b[i]=k+1;
l[k+1]=i;
if(nr<k+1)nr=k+1;
}
for(i=1;i<=n;i++)
if(b[i]>max)
{
max=b[i];
k=i;
}
printf("%d\n",max);
afis(k);
return 0;
}