Cod sursa(job #1342552)

Utilizator dianaorasanuDiana Orasanu dianaorasanu Data 14 februarie 2015 10:59:47
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;

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

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

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

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

void citire()
{
    int i;
    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()
{
    int i, lgmax, imax = 1;
    lgmax = lg[1];
    for(i = 2; i <= n; ++i)
    if(lgmax < lg[i])
    {
        lgmax = lg[i];
        imax = i;
    }
    fout << lgmax << '\n';
    for(i = imax; i ;i = urm[i])
        fout << a[i] << ' ';
    fout << '\n';
    fout.close();

}