Cod sursa(job #1800192)

Utilizator andreinmAndrei andreinm Data 7 noiembrie 2016 15:18:12
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
using namespace std;

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

const int NMax = 100010;
int v[NMax], pos[NMax], L[NMax];
int n, max_length, max_index;

void readData() {
    in >> n;
    for(int i = 1; i <= n; ++i)
        in >> v[i];
}

void buildL() {
    pos[n] = -1; L[n] = 1;

    for (int i = n - 1; i >= 1; --i) {
        pos[i] = -1, L[i] = 1;

        for (int j = i + 1; j <= n; ++j)
            if (v[i] < v[j] && L[j] + 1 > L[i]) {
                pos[i] = j;
                L[i] = L[j] + 1;
            }
    }
}

void printData() {
    int i; max_index = n;

    for (i = 1; i <= n; ++i)
        if (L[i] > max_length) {
            max_length = L[i];
            max_index = i;
        }

    i = max_index;
    out << max_length << '\n';

    while (i != -1) {
        out << v[i] << ' ';
        i = pos[i];
    }
}

int main()
{
    readData();
    buildL();
    printData();

    return 0;
}