Pagini recente » Cod sursa (job #74110) | Cod sursa (job #2182424) | Cod sursa (job #2809978) | Cod sursa (job #2755908) | Cod sursa (job #1274105)
#include<stdio.h>
const int NMAX = 100000;
const int INF = 2000000000;
int minim[NMAX+1];
inline int cautb(int x)
{
int st=0, dr=NMAX, med;
while(st<=dr)
{
med=(st+dr)>>1;
if(minim[med]>=x)
dr=med-1;
else
st=med+1;
}
return st;
}
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int n, lmax=0, x, poz=0;
scanf("%d", &n);
for(int i=1; i<NMAX; ++i)
minim[i]=INF;
for(int i=1; i<=n; ++i)
{
scanf("%d", &x);
poz=cautb(x);
minim[poz]=x;
if(poz>lmax)
lmax=poz;
}
printf("%d\n", lmax);
for(int i=1; i<=lmax; ++i)
printf("%d ", minim[i]);
printf("\n");
return 0;
}