Pagini recente » Cod sursa (job #2869858) | Cod sursa (job #268725) | Cod sursa (job #2712069) | Cod sursa (job #302297) | Cod sursa (job #1565359)
#include<cstdio>
#define N 100010
int l,q[N],p[N],v[N];
int caut_bin(int l1,int l2, int x){
int poz,m;
poz=-1;
while(l1<=l2){
m=(l1+l2)/2;
if(x<=q[m]){
poz=m;
l2=m-1;
}
else
l1=m+1;
}
return poz;
}
void afisare(int l,int n){
if(l>0&&n>0)
if(p[n]==l){
afisare(l-1,n-1);
printf("%d ",v[n]);
}
else
afisare(l,n-1);
}
int main(){
int n,i,poz;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&v[i]);
if(i==1){
l=1;
q[1]=v[i];
p[1]=1;
}
else{
poz=caut_bin(1,l,v[i]);
if(poz==-1){
l++;
q[l]=v[i];
p[i]=l;
}
else{
q[poz]=v[i];
p[i]=poz;
}
}
}
printf("%d\n",l);
afisare(l,n);
return 0;
}