Pagini recente » Cod sursa (job #38751) | Cod sursa (job #2632842) | Cod sursa (job #2457481) | Cod sursa (job #639944) | Cod sursa (job #361010)
Cod sursa(job #361010)
#include<stdio.h>
#define N 100100
int n,i,A[N],P[N],V[N],D[N],L,H,M,LM;
void read(),solve(),print(int C);
int main()
{
read();
solve();
return 0;
}
void read()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&A[i]);
}
void solve()
{
LM=1;P[1]=1;V[1]=A[1];
for(i=2;i<=n;i++)
{
if(A[i]>V[LM])
{
LM++;P[LM]=i;V[LM]=A[i];D[i]=P[LM-1];continue;
}
if(A[i]<=V[1])
{
P[1]=i;V[1]=A[i];D[i]=0;continue;
}
L=1;H=LM;
for(;H-L-1;)
{
M=(L+H)>>1;if(V[M]<A[i])L=M;else H=M;
}
if(A[i]<V[H])
{
P[H]=i;V[H]=A[i];D[i]=P[L];
}
}
printf("%d\n",LM); print(P[LM]);
}
void print(int C)
{
if(!C)return;print(D[C]);printf("%d ",A[C]);
}