Pagini recente » Cod sursa (job #1644877) | Cod sursa (job #1765123) | Cod sursa (job #1314109) | Cod sursa (job #1911067) | Cod sursa (job #1464919)
#include<cstdio>
int v[100010],best[100003],urm[100003],maxim=1,L[100003],sol[100010];
int bin_search(int x){
int l1=0,l2=maxim,m;
while(l1<=l2){
m=(l1+l2)/2;
if(v[L[m]]<x&&v[L[m+1]]>=x)
return m;
else
if(v[L[m+1]]<x)
l1=m+1;
else
l2=m-1;
}
return maxim;
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int i,j,poz,n,p;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
best[1]=L[1]=1;
for(i=2;i<=n;i++){
p=bin_search(v[i]);
urm[i]=L[p];
best[i]=p+1;
L[p+1]=i;
if(maxim<p+1){
maxim=p+1;
poz=i;
}
}
printf("%d\n",maxim);
for(i=maxim;i>=1;i--){
sol[i]=v[poz];
poz=urm[poz];
}
for(i=1;i<=maxim;i++)
printf("%d ",sol[i]);
return 0;
}