Cod sursa(job #809123)

Utilizator sora_naegino1Timofte Stefana sora_naegino1 Data 7 noiembrie 2012 21:49:58
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;

ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

int lgmax[100003], a[100003], sol, urm[100003], p, n;

void citire();
void pd();
void constr();

int main()
{
    citire();
    pd();
    constr();

    return 0;
    fout.close();
}

void citire()
{
    fin >> n;
    for (int i=0; i<n; ++i)
        fin >> a[i];
}

void pd()
{
    int i, j, maxim=1;

    lgmax[n-1] = 1;
    urm[n-1] = -1;
    p = n;
    for (i=n-2; i>=0; i--)
    {
        lgmax[i] = 1;
        urm[i] = -1;
        for (j=i+1; j<=n-1; ++j)
            if (a[i]<a[j] && lgmax[i] < lgmax[j]+1)
            {
                lgmax[i] = lgmax[j]+1;
                urm[i] = j;
                if (lgmax[i]>maxim)
                    maxim = lgmax[i],p=i;
            }
    }
    fout << maxim << '\n';
}

void constr()
{
    int i=p;
    while (i!=-1)
    {
        fout << a[i] << ' ';
        i=urm[i];
    }
}