Pagini recente » Cod sursa (job #2158065) | Cod sursa (job #1416495) | Cod sursa (job #510220) | Cod sursa (job #581112) | Cod sursa (job #2444471)
#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;
#define inf 30000
ifstream fi("scmax.in");
ofstream fo("scmax.out");
int v[25],q[25],p[25];
int n,len;
void read()
{
fi>>n;
for(int i=1;i<=n;i++)
fi>>v[i];
}
int inser(int k,int l,int r)
{
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(int i=2;i<=n;i++)
p[i]=inser(v[i],1,len+1);
}
void createS()
{
int i=n;
for(int k=len;k>=1;k--)
{while(k!=p[i])
i--;
q[k]=v[i];}
}
int main()
{
read();
createP();
createS();
fo<<len<<'\n';
for(int i=1;i<=len;i++)
fo<<q[i]<<" ";
return 0;
}