Pagini recente » Cod sursa (job #413866) | Monitorul de evaluare | Istoria paginii utilizator/tanaseanualexia | Cod sursa (job #83668) | Cod sursa (job #191552)
Cod sursa(job #191552)
#include<stdio.h>
#define N 100005
int v[N],x[N],pred[N];
/*
int caut(int x,int i){
for(int j=0;j<i;++j)
if(v[j]<x)
return 1;
return 0;
}
*/
int caut(int k,int u){
int p,m;
p=1;
while(p<u){
m=(p+u)/2;
if(k<=v[x[m]])
u=m;
else
p=m+1;
}
if(v[x[p]]<k)
return p+1;
return p;
}
void afisare(int r){
if(r==0)
return;
afisare(pred[r]);
printf("%d ",v[r]);
}
int main(){
int n,i,q=0,p;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
x[0]=0;
pred[0]=0;
scanf("%d",&v[++q]);
pred[q]=0;
x[q]=1;
for(i=2;i<=n;++i){
scanf("%d",&v[i]);
p=caut(v[i],q);
if(p>q)
++q;
x[p]=i;
pred[i]=x[p-1];
}
printf("%d\n",q);
afisare(x[q]);
fclose(stdin);
fclose(stdout);
return 0;
}