Pagini recente » Cod sursa (job #3210326) | Cod sursa (job #1352023) | Cod sursa (job #1664851) | Cod sursa (job #2286692) | Cod sursa (job #177918)
Cod sursa(job #177918)
#include<stdio.h>
int nr[100100],h,best[100100],pred[100100],lista[100100];
int caut(int x){
int st=0,dr=h,mij;
while(st<dr){
mij=(st+dr+1)>>1;
if(nr[lista[mij]]==x)
return mij-1;
if(nr[lista[mij]]<x)
st=mij;
else
dr=mij-1;
}
return st;
}
void scrie(int i){
if(!i)
return;
scrie(pred[i]);
printf("%d ",nr[i]);
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,max=0,poz;
scanf("%d",&n);
for(i=1;i<=n;++i){
scanf("%d",&nr[i]);
poz=caut(nr[i]);
lista[poz+1]=i;
if(poz+1>h)
h=poz+1;
best[i]=poz+1;
pred[i]=lista[poz];
if(best[i]>best[max])
max=i;
}
printf("%d\n",best[max]);
scrie(max);
printf("\n");
fclose(stdin);
fclose(stdout);
return 0;
}