Pagini recente » Cod sursa (job #1510328) | Cod sursa (job #2473195) | Cod sursa (job #1583654) | Cod sursa (job #1917373) | Cod sursa (job #1903576)
#include <iostream>
#define MAX 1001
#include <limits.h>
#include <fstream>
using namespace std;
int n,a[MAX],B[MAX],P[MAX],s[MAX];
ifstream fin("scmax.in");
ofstream fout("scmax.out");
void citire(int &n,int a[])
{ fin>>n;
for(int i=1;i<=n;++i)
fin>>a[i];
}
void calcul(int a[])
{int max=INT_MIN;
B[1]=1;P[1]=0;
for(int i=2;i<=n;++i)
{max=0;
P[i]=0;
for(int j=1;j<=i-1;++j)
if(a[i]>a[j] && max<B[j])max=B[j],P[i]=j;
B[i]=max+1;
}
}
void construire(int a[],int B[],int P[])
{
int m=1;
for(int i=2;i<=n;++i)
if(B[m]<B[i])m=i;
int k=B[m],nr=B[m];
s[k]=a[m];
while(P[m]>0)
{m=P[m];
k=k-1;
s[k]=a[m];
}
fout<<nr<<endl;
for(int i=1;i<=nr;++i)
fout<<s[i]<<" ";
}
int main()
{
citire(n,a);
calcul(a);
construire(a,B,P);
return 0;
}