Pagini recente » Cod sursa (job #131233) | Cod sursa (job #120246) | Cod sursa (job #1512924) | Cod sursa (job #3037754) | Cod sursa (job #750514)
Cod sursa(job #750514)
# 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;
while (st<=dr && q[m]!=x)
{
m=(st+dr)/2;
if (q[m]==x) return m;
else
if (q[m]>x) dr=m-1;
else
st=m+1;
}
return st;
}
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;
}