Pagini recente » Cod sursa (job #3256889) | Cod sursa (job #478262) | Cod sursa (job #796965) | Cod sursa (job #384363) | Cod sursa (job #1464920)
#include<cstdio>
int v[100010],best[100010],urm[100010],maxim=1,L[100010],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;
}