Cod sursa(job #2052155)

Utilizator deleted_fb9d5fb04f7b88d9DELETED deleted_fb9d5fb04f7b88d9 Data 30 octombrie 2017 08:59:10
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
#define NM 100001
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");

int a[NM], b[NM], n;

void afis(int t, int nr) {
    if (nr != 0)

    for (int j = t; j >= 0; j--)
        if (b[j] == nr) {
            afis(j, nr - 1);
            fout << a[j] << ' ';
            break;
        }
}

void afis(int t) {
    int i, nr;
    nr = b[t];
    i = t;
    while (nr > 0) {
        if (b[i] == nr) {
            nr--;
            fout << a[i] << ' ';
        }
        i--;
    }
}

int main() {
    int i, j;

    fin >> n;
    for (i = 1; i <= n; ++i) fin >> a[i];

    for (i = 1; i <= n; ++i) {
        int nmax = 0;
        for (j = 1; j < i; ++j)
            if (a[j] < a[i]) nmax = b[j] + 1;

        b[i] = max(nmax, 1);
    }

    int nmax = 0;
    int ibun;
    for (i = 1; i <= n; ++i)
        if (nmax < b[i]) nmax = b[i], ibun = i;

    fout << b[ibun] << '\n';
    afis(ibun, b[ibun]);

    return 0;
}