Pagini recente » Cod sursa (job #2847115) | Cod sursa (job #1622463) | Cod sursa (job #1251107) | Cod sursa (job #2655031) | Cod sursa (job #228306)
Cod sursa(job #228306)
#include <stdio.h>
#define NMAX 100000
long n,i,x[NMAX],m[NMAX],p[NMAX],max,j;
long q,t,sol[NMAX];
int binary_search(long a, long b)
{
long ls=0,mij;
while (ls<a)
{
mij=(ls+a)/2;
if (x[m[mij]]<b)
ls=mij+1;
else a=mij;
}
return ls-1;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;++i)
scanf("%ld", x+i);
max=0;
m[0]=0;
for (i=1;i<=n;++i)
{
j=binary_search(max+1,x[i]);
p[i]=m[j];
if (j==max || x[i] < x [m[j+1]])
m[j+1]=i;
if (max<j+1)
max=j+1;
}
printf("%ld\n", max);
sol[1]=x[m[max]];
q=1;
t=m[max];
while (t)
{
q++;
sol[q]=x[p[t]];
t=p[t];
}
for (i=max;i;--i)
printf("%ld ",sol[i]);
printf("\n");
return 0;
}