Pagini recente » Cod sursa (job #2948997) | Cod sursa (job #12989) | Cod sursa (job #899163) | Cod sursa (job #1266626) | Cod sursa (job #2417703)
#include <iostream>
#include <cstring>
#define Infinity 30000
using namespace std;
//ifstream fin("scmax.in");
//ofstream fout("scmax.out");
long long n,v[100001],p[100001],q[100001],len,maxx=0,imax;
int inssert(int a,int st, int dr)
{
int mid=(st+dr)/2;
if(st==dr)
{
if(dr>len)
{
q[++len+1]=Infinity;
}
q[st]=a;
return st;
}
else
{
if(a<q[mid])
return inssert(a,st,mid);
else
if(a>q[mid])
return inssert(a,mid+1,dr);
}
}
void buildPQ()
{
len=0;
q[1]=Infinity;
for(int i=1;i<=n;i++)
{
p[i]=inssert(v[i],1,len+1);
}
}
void buildSOL()
{
int k=n;
for(int i=len;i>=1;i--)
{
while(p[k]!=i)
k--;
q[i]=v[k];
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>v[i];
buildPQ();
buildSOL();
cout<<len<<"\n";
for(int i=1;i<=len;i++)
cout<<q[i]<<" ";
return 0;
}