Pagini recente » Cod sursa (job #987337) | Cod sursa (job #2183959) | Cod sursa (job #3249952) | Cod sursa (job #1994722) | Cod sursa (job #483693)
Cod sursa(job #483693)
#include <cstdio>
#define N 100003
int last[N],poz[N];
int main()
{
int n,i,m=0,v[N];
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
{
int x=1,y=m,sol=0;
scanf("%d",&v[i]);
while (x<=y)
{
int z=(x+y)/2;
if (last[z]>v[i])
y=z-1,sol=z; else
if (last[z]<v[i]) x=z+1; else
sol=z,x=y+1;
}
if (!sol) ++m,sol=m;
last[sol]=v[i];
poz[i]=sol;
}
printf("%d\n",m);
for (i=m;i>0;--i)
{while (poz[n]!=i && n) --n;
last[i]=v[n];
}
for (i=1;i<=m;++i)
printf("%d ",last[i]);
return 0;}