Pagini recente » Cod sursa (job #1015713) | Cod sursa (job #1887517) | Cod sursa (job #2187837) | Cod sursa (job #2326212) | Cod sursa (job #1739798)
//afiseaza o solutie din multe
#include <fstream>
#include <iostream>
#define NMAX 100001
using namespace std;
int a[NMAX];
int n;
int B[NMAX];
int s[NMAX];
int l;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
void calculB ()
{
B[1]=1;
int i, j, max;
for(i=2; i<=n; i++)
{
max=0;
for(j=1; j<=i-1; j++)
if(a[j]<a[i] && max<B[j])
max=B[j];
B[i]=max+1;
}
}
void construire ()
{
int m, i, k;
m=1;
for(i=2; i<=n; i++)
if(B[i]>B[m])
m=i;
k=B[m];
l=k;
s[k]=a[m];
while(B[m]>1)
{
i=m-1;
while(a[i]>=a[m]||B[i]!=B[m]-1)
i--;
m=i;
k--;
s[k]=a[m];
}
}
int main()
{
fin>>n;
int i;
for(i=1; i<=n; i++)
fin>>a[i];
calculB();
construire();
fout<<l<<'\n';
for(i=1; i<=l; i++)
fout<<s[i]<<' ';
return 0;
}