Pagini recente » Cod sursa (job #2247417) | Cod sursa (job #2514622) | Cod sursa (job #2333636) | Cod sursa (job #2725610) | Cod sursa (job #2444472)
#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;
#define inf 30000
ifstream fi("scmax.in");
ofstream fo("scmax.out");
long int v[25],q[25],p[25];
long int n,len;
void read()
{
fi>>n;
for(int i=1;i<=n;i++)
fi>>v[i];
}
long int inser(long int k,long int l,long int r)
{
long int mid=(l+r)/2;
if(l==r)
{
q[l]=k;
if(r>len)
q[++len+1]=inf;
return l;
}
if(k<=q[mid])
return inser(k,l,mid);
else
return inser(k,mid+1,r);
}
void createP()
{
p[1]=1;
q[1]=q[2]=inf;
for(long int i=2;i<=n;i++)
p[i]=inser(v[i],1,len+1);
}
void createS()
{
long int i=n;
for(long int k=len;k>=1;k--)
{while(k!=p[i])
i--;
q[k]=v[i];}
}
int main()
{
read();
createP();
createS();
fo<<len<<'\n';
for(long int i=1;i<=len;i++)
fo<<q[i]<<" ";
return 0;
}