Pagini recente » Cod sursa (job #2923078) | Cod sursa (job #2949657) | Cod sursa (job #2919164) | Cod sursa (job #768427) | Cod sursa (job #513496)
Cod sursa(job #513496)
#include <stdio.h>
int i,N,A[100010],Q[100010],P[100010],len,pos,v[100010],nr;
int BS(int L,int R,int x)
{
int M=(L+R)/2;
if(L==R) return L;
if(x<=Q[M]) return BS(L,M,x);
else return BS(M+1,R,x);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&N);
for(i=1;i<=N;i++) scanf("%d",&A[i]);
Q[1]=A[1];
P[1]=1;
len=1;
for(i=2;i<=N;i++)
{
if(Q[len]<A[i])
{
Q[++len]=A[i];
P[i]=len;
}
else
{
pos=BS(1,len,A[i]);
Q[pos]=A[i];
P[i]=pos;
}
}
printf("%d\n",len);
nr=0;
i=N;
while(i>0)
{
while(P[i]!=len&&i>0) i--;
if(i>0)
{
len--;
v[++nr]=A[i];
}
}
for(i=nr;i>0;i--)
printf("%d ",v[i]);
printf("\n");
return 0;
}