Cod sursa(job #1739798)

Utilizator castle2145Popa Catalin castle2145 Data 10 august 2016 11:39:50
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
//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;
}