Cod sursa(job #1374880)

Utilizator dianaorasanuDiana Orasanu dianaorasanu Data 5 martie 2015 11:10:00
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>

#define IN "scmax.in"
#define OUT "scmax.out"

using namespace std;

ifstream fin(IN);
ofstream fout(OUT);

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

int n, a[100002], lg[100002], poz[100002];
int lgmax, p;

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 = 0, j = 0;
    lg[n] = 1;
    poz[n] = 0;
    for(i = n-1; i >= 1; --i)
    {
        lg[i] = 1;
        poz[i] = 0;
        for(j = i+1; j <= n; ++j)
        {
            if(a[i] < a[j])
                if(lg[i] < lg[j]+1)
            {
                lg[i] = lg[j] + 1;
                poz[i] = j;
            }
        }
    }
    for(i = 1; i <= n; ++i)
        if(lgmax < lg[i])
    {
        lgmax = lg[i];
        p = i;
    }

}

void afisare()
{
    int i;
    fout << lgmax << '\n';
    for(i = p; i != 0; i = poz[i])
        fout << a[i] << ' ';
}