Cod sursa(job #1381786)

Utilizator flore77Simion Florentin flore77 Data 8 martie 2015 13:15:22
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
//#include <iostream>
#include <fstream>
using namespace std;

int maxim[100100], pre[10010], suc[100100], v[100100];

int main() {
    ifstream in("scmax.in");
    ofstream out("scmax.out");
    int n, i, j, maxi = 0;
    in >> n;
    for (i = 1; i <= n; i++)
        in >> v[i];

    maxim[0] = 0;
    for (i = 1; i <= n; ++i) {
        maxim[i] = 0;
        for (j = 1; j < i; ++j) {
            if (v[j] < v[i]) {
                if (maxim[j] > maxim[i]) {
                    maxim[i] = maxim[j];
                    pre[i] = j;
                }
            }
        }
        ++maxim[i];
        if (maxim[i] > maxim[maxi])
            maxi = i;
    }
    out << maxim[maxi] << "\n";

    int k = 0;
    while (maxi) {
        suc[maxi] = k;
        k = maxi;
        maxi = pre[maxi];
    }

    while (k) {
        out << v[k] << " ";
        k = suc[k];
    }
    in.close();
    out.close();
    return 0;
}