Pagini recente » Cod sursa (job #711237) | Cod sursa (job #2481846) | Cod sursa (job #284818) | Cod sursa (job #951014) | Cod sursa (job #561626)
Cod sursa(job #561626)
#include <string.h>
#include <stdio.h>
int d[100002],v[100002];
int i,size,pos,N;
int BS(int x,int L,int R)
{
if(L<=R)
{
int M=(L+R)/2;
if(x>d[M]) return BS(x,L,M-1);
else
if(x<d[M]) return BS(x,M+1,R);
else return M;
}
else return L;
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++) scanf("%d",&v[i]);
memset(d,0,sizeof(d));
size=1;
d[1]=v[N];
for(i=N-1;i>0;i--)
{
pos=BS(v[i],1,size+1);
if(pos>size) size=pos;
if(d[pos]<v[i]) d[pos]=v[i];
}
printf("%d\n",size);
for(i=size;i>0;i--) printf("%d ",d[i]);
return 0;
}