Pagini recente » Cod sursa (job #54992) | Cod sursa (job #566809) | Cod sursa (job #1522250) | Cod sursa (job #1218827) | Cod sursa (job #286586)
Cod sursa(job #286586)
#include <stdio.h>
long v[1000],a[1000],val[1000],i,poz,x,l,n,sol[1000];
long cauta(long x,long st,long fin)
{long mij;
mij=(st+fin)/2;
if(st==fin)return mij;
else if(v[mij]<x)return cauta(x,mij+1,fin);
else return cauta(x,st,mij);
}
int main()
{freopen("scmax.in","r",stdin);freopen("scmax.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
{scanf("%ld",&a[i]);
if(i>1) {x=a[i];poz=cauta(x,1,l);
if(x>v[poz]){l++;v[l]=x;val[i]=l;}
else {v[poz]=x;val[i]=poz;if(l==0)l++;}
}
else {l=1;v[l]=a[i];val[i]=1;}
}
printf("%ld\n",l);x=l;
for(i=n;i>=1;i--)if(val[i]==l){sol[l]=a[i];l--;}
for(i=1;i<=x;i++)printf("%ld ",sol[i]);
return 0;
}