Pagini recente » Cod sursa (job #1391790) | Cod sursa (job #159842) | Cod sursa (job #1562178) | Cod sursa (job #300742) | Cod sursa (job #1391703)
#include <cstdio>
int n;
int a[100001],best[100001],m[100001],p[100001];
void afis(int pos)
{
if(pos!=1&&p[m[pos]]!=0) afis(p[pos]);
printf("%d ",a[m[pos]]);
}
int main()
{
freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
best[1]=1;
m[1]=1;
int l=1;
a[0]=2000000001;
for(int i=2;i<=n;i++)
{
int s=1,e=l;
while(s<=e)
{
int mij=(s+e)/2;
if(a[m[mij]]<a[i]) s=mij+1;
else e=mij-1;
}
if(l<s) l=s;
if(a[m[s]]>a[i]) m[s]=i;
p[i]=m[s];
}
printf("%d\n",l);
for(int i=1;i<=l;i++) printf("%d ",a[m[i]]);
}