Pagini recente » Cod sursa (job #433562) | Cod sursa (job #1564343) | Cod sursa (job #3224910) | Cod sursa (job #344378) | Cod sursa (job #759131)
Cod sursa(job #759131)
#include <cstdio>
#define MAX 100001
int n,k,x[MAX],best[MAX],c[MAX];
int caut_binar(int val,int l,int r){
int m;
//printf("%d ",val); printf("(%d %d) ",l,r);
//for(int i=1;i<=n;i++)printf("%d ",c[i]);printf("\n");
while(l<r)
{
m=(l+r)/2;
if(c[m]>=val) r=m; else l=m+1;
// printf("(%d %d) ",l,r);
}
// printf("%d\n",r);
if(r>k)c[++k]=val; else c[r]=val;
return r;
}
void afis(int i,int k){
for(;i>0;i--)
if(best[i]==k)
{
afis(i-1,k-1);
printf("%d ",x[i]);
return;
}
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&x[i]);
for(int i=1;i<=n;i++)best[i]=caut_binar(x[i],1,k+1);
// for(int i=1;i<=n;i++)printf("%d ",best[i]);
printf("%d\n",k);
afis(n,k);
return 0;
}