Pagini recente » Cod sursa (job #60467) | Cod sursa (job #2228998) | Cod sursa (job #2308286) | Cod sursa (job #362478) | Cod sursa (job #338947)
Cod sursa(job #338947)
#include <stdio.h>
#define MAXN 100001
int i,nr,m,x,n;
int a[MAXN],b[MAXN],c[MAXN];
int caut(int x)
{
int mij,st,dr,rasp;
st=0; dr=m; rasp=m;
while (st<=dr)
{
mij=(st+dr) >> 1;
if (c[mij]<x && c[mij+1]>=x)
{
rasp=mij;
break;
}
else
if (c[mij+1]<x)
st=mij+1;
else
dr=mij-1;
}
return rasp;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for (i=1; i<=n; i++)
scanf("%d",&a[i]);
c[1]=a[1]; b[1]=1;
for (i=2; i<=n; i++)
{
x=caut(a[i]);
b[i]=x+1;
c[x+1]=a[i];
if (m<x+1) m=x+1;
}
printf("%d\n",m);
nr=0;
c[0]=2000000100;
for (i=n; i>=1; i--)
if (b[i]==m && a[i]<c[nr])
{
nr++;
c[nr]=a[i];
m--;
}
for (i=nr; i>=1; i--)
printf("%d ",c[i]);
fclose(stdin); fclose(stdout);
return 0;
}