Pagini recente » Cod sursa (job #2608498) | Cod sursa (job #2108270) | Cod sursa (job #652617) | Cod sursa (job #2561790) | Cod sursa (job #708046)
Cod sursa(job #708046)
#include <cstdio>
#define NMax 10001
#include <list>
using namespace std;
long n,m[NMax],v[NMax],L,j,N,val,pv[NMax],uu[NMax];
list<long> li;
long bsearch(long,long,long);
int main()
{
freopen("scmax.in","rt",stdin);
freopen("scmax.out","wt",stdout);
scanf("%ld",&N);
long ult=0;
for(long i=1;i<=N;i++)
{
scanf("%ld",&v[i]);
j=bsearch(1,L,v[i]);
if(!(v[i]==m[j]))
if(j==L+1)
m[++L]=v[i],pv[i]=uu[L-1],uu[L]=i;
else
m[j]=v[i],pv[i]=uu[j-1],uu[j]=i;
}
printf("%ld\n",L);
long x=uu[L];
while(x)
{
li.push_front(v[x]);
x=pv[x];
}
for(list<long>::iterator i=li.begin();i!=li.end();i++)
printf("%ld ",*i);
printf("\n");
return 0;
}
long bsearch(long in,long fn,long val)
{
long mid=(in+fn)/2;
if(in>fn)
return L+1;
if(m[mid]>=val)
if(m[mid-1]<val)
return mid;
else
return bsearch(in,mid-1,val);
else
return bsearch(mid+1,fn,val);
}