Pagini recente » Cod sursa (job #587654) | Cod sursa (job #2404166) | Cod sursa (job #2513812) | Profil StarGold2 | Cod sursa (job #750506)
Cod sursa(job #750506)
# include <stdio.h>
int a[100001],q[100001],p[100001],poz,i,nr,n,b[100001],n1,max;
int cb(int x, int st, int dr)
{
int m=(st+dr)/2;
if (st==dr && q[m]>x) return m;
else
if (st>dr)
return st;
else
if (q[m]>x) return cb(x,st,m);
else
return cb(x,m+1,dr);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d\n",&n);
for (i=1; i<=n; i++)
scanf("%d ",&a[i]);
q[1]=a[1];
p[1]=1;
nr=1;
for (i=2; i<=n; i++)
{
poz=cb(a[i],1,nr);
if (poz>nr) { nr++; q[nr]=a[i]; }
q[poz]=a[i];
p[i]=poz;
if (p[i]>max) max=p[i];
}
printf("%d\n",max);
for (i=n; i>=1; i--)
{
if (p[i]==max && max!=0)
{
b[++n1]=a[i];
max--;
}
}
for (i=n1; i>=1; i--)
printf("%d ",b[i]);
printf("\n");
return 0;
}