Pagini recente » Cod sursa (job #3267735) | Cod sursa (job #1835213) | Cod sursa (job #2999361) | Cod sursa (job #2389500) | Cod sursa (job #2924663)
//Ilie Dumitru
#include<cstdio>
#include<cstring>
const int NMAX=100005;
int smallest[NMAX], N, v[NMAX], pozModified[NMAX], lmax, sol[NMAX];
int main()
{
FILE* f=fopen("scmax.in", "r"), *g=fopen("scmax.out", "w");
int i, j, l, r, m;
fscanf(f, "%d", &N);
for(i=0;i<N;++i)
fscanf(f, "%d", v+i);
fclose(f);
smallest[0]=v[0];
lmax=1;
for(i=1;i<N;++i)
{
l=-1;
r=lmax;
while(r-l>1)
{
m=(r+l)>>1;
if(smallest[m]<v[i])
l=m;
else
r=m;
}
smallest[(pozModified[i]=r)]=v[i];
if(r==lmax)
++lmax;
}
j=lmax-1;
for(i=N-1;i>-1;--i)
if(pozModified[i]==j)
sol[j--]=v[i];
fprintf(g, "%d\n", lmax);
for(i=0;i<lmax;++i)
fprintf(g, "%d ", sol[i]);
fclose(g);
return 0;
}