Cod sursa(job #2052148)

Utilizator deleted_fb9d5fb04f7b88d9DELETED deleted_fb9d5fb04f7b88d9 Data 30 octombrie 2017 08:45:17
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 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) {
    int j;
    if (i == 0) fout << nr << '\n';
    for (j = i - 1; j >= 1; --j)
        if (b[j] == b[i] - 1) {
            nr++;
            afis(j);
            break;
        }
    if (j == 0) fout << nr + 1<< '\n';
    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);
    }

//    for (i = 1; i <= n; ++i)
//        fout << b[i] << ' ';

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

    afis(ibun);

    return 0;
}