Cod sursa(job #1903582)

Utilizator danutmafteiMaftei Danut danutmaftei Data 5 martie 2017 12:10:33
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#define MAX 100001
#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;
}