Cod sursa(job #1342562)

Utilizator IoanaBacrauIoana Georgiana Bacrau IoanaBacrau Data 14 februarie 2015 11:04:47
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

#define NMAX 100000

int n, a[NMAX], lg[NMAX], urm[NMAX];

void citire();
void pd();
void afisare();

int main()
{
    citire();
    pd();
    afisare();
    return 0;
}

void citire()
{
    int i;
    ifstream fin("scmax.in");
    fin >> n;
    for(i=1; i<= n; ++i)
        fin >> a[i];
}

void pd()
{
    int i, j, jmax, maxim;
    lg[n]= 1; urm[n]=0;
    for(i=n-1; i > 0; --i)
    {
        jmax=0;
        maxim=1;
        for(j=i+1; j<=n; j++)
            if(a[i] < a[j] && 1+lg[j] > maxim)
            {
                maxim = 1+lg[j];
                jmax=j;
            }
        lg[i]= maxim;
        urm[i]=jmax;
    }
}

void afisare()
{
    ofstream fout("scmax.out");
    int i, lgmax, imax;
    lgmax= lg[1];
    for(i=2; i<=n; ++i)
        if(lgmax < lg[i])
        {
            lgmax= lg[i];
            imax= i;
        }
    fout << lgmax << '\n';
    ///reconstitui sirul
    for(i= imax; i ; i=urm[i])
        fout << a[i] << ' ';
    fout << '\n';
    fout.close();
}