Pagini recente » Cod sursa (job #3132371) | Cod sursa (job #143431) | Cod sursa (job #2353330) | Cod sursa (job #576074) | Cod sursa (job #1552485)
#include<cstdio>
struct aa{int x,y;};
aa v[100001];
int s[100001];
int main ()
{freopen ("scmax.in","r",stdin);
freopen ("scmax.out","w",stdout);
int n,i,c1,c2,x,nr,k,q;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i].x);
q=1;
s[0]=1;
s[1]=v[1].x;
v[1].y=1;
for(i=2;i<=n;i++)
{c1=1;
c2=s[0];
k=1;
while(c1<=c2)
{x=(c1+c2)/2;
if(s[x]>=v[i].x)
{c2=x-1;
k=x;
}
else
c1=x+1;
}
if(s[1]>=v[i].x)
{v[i].y=1;
s[1]=v[i].x;
}
else
if(s[s[0]]<v[i].x)
{s[0]++;
s[s[0]]=v[i].x;
v[i].y=s[0];
}
else
{s[k]=v[i].x;
v[i].y=k;
}
if(s[0]>q)
q=s[0];
}
printf("%d\n",q);
nr=q;
k=2000000001;
for(i=n;i>=1;i--)
if(v[i].y==nr&&v[i].x<k)
{k=v[i].x;
v[i].y=-1;
nr--;
}
for(i=1;i<=n;i++)
if(v[i].y==-1)
printf("%d ",v[i].x);
return 0;
}