Cod sursa(job #2052151)

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

int a[NM], b[NM], n;
int nr = 0;

void afis(int i) {
    if (b[i] == 1) fout << nr + 1<< '\n';
    else
        for (int j = i - 1; j >= 1; --j)
            if (b[j] == b[i] - 1) {
                nr++;
                afis(j);
                break;
            }
    fout << a[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;

    afis(ibun);

    return 0;
}