Pagini recente » Cod sursa (job #1511993) | Cod sursa (job #1450300) | Cod sursa (job #1185851) | Cod sursa (job #1511981) | Cod sursa (job #1391712)
#include <cstdio>
int n;
int a[100001],best[100001],m[100001],p[100001],af[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-1];
}
printf("%d\n",l);
int ltmp=l;
l=m[l];
for(int i=ltmp;i>=1;i--)
{
af[i]=a[l];
l=p[l];
}
for(int i=1;i<=ltmp;i++) printf("%d ",af[i]);
}