Pagini recente » Cod sursa (job #1215184) | Cod sursa (job #2853532) | Cod sursa (job #2053873) | Cod sursa (job #2445226) | Cod sursa (job #203821)
Cod sursa(job #203821)
#include <stdio.h>
#define N 100004
int v[N],pre[N],L[N],c=1;
int caut(int x){
int st=1,dr=c,m;
if(v[L[dr]]>=x) return dr;
else return dr+1;
while(st<dr){
m=(st+dr)>>1;
if(v[L[m]]==x) return m;
if(v[L[m]]<x) dr=m-1;
else st=m+1;
}
return st;
}
void afiseaza(int x){
if(pre[x]>0)
afiseaza(pre[x]);
printf("%d ",v[x]);
}
int main(){
int i,poz,max=0,imax,n;
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
L[1]=1;
for(i=2;i<=n;i++){
poz=caut(v[i]);
pre[i]=L[poz-1];
L[poz]=i;
if(poz==c+1) c++;
if(poz>max) {
max=poz;
imax=i;
}
}
printf("%d\n",max);
afiseaza(imax);
}