Pagini recente » Cod sursa (job #1869744) | Cod sursa (job #2797598) | Cod sursa (job #579096) | Cod sursa (job #1296032) | Cod sursa (job #561631)
Cod sursa(job #561631)
#include <stdio.h>
#include <string.h>
#define Dim 100001
int v[Dim],q[Dim],d[Dim];
int BS(int x,int L,int R)
{
if(L<=R)
{
int M=L+(R-L)/2;
if(x>=q[M]) return BS(x,L,M-1);
else return BS(x,M+1,R);
}
else return L;
}
int main()
{
int i,N,pos,size;
freopen("scmax.in","r",stdin);
scanf("%d",&N);
for(i=0;i<N;i++) scanf("%d",&v[i]);
memset(q,0,sizeof(q));
memset(d,0,sizeof(d));
d[N-1]=1;
q[1]=v[N-1];
size=1;
for(i=N-2;i>-1;i--)
if(q[size]>v[i])
{
q[++size]=v[i];
d[i]=size;
}
else
{
pos=BS(v[i],1,size);
q[pos]=v[i];
d[i]=pos;
}
freopen("scmax.out","w",stdout);
i=0;
printf("%d\n",size);
while(i<=N&&size)
{
while(d[i]!=size&&i<=N) i++;
printf("%d ",v[i]);
i++;
size--;
}
printf("\n");
return 0;
}