Cod sursa(job #3190548)

Utilizator Pop_AlexandruPop Alexandru Pop_Alexandru Data 7 ianuarie 2024 18:24:40
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>
using namespace std;

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

#define NMAX 100005

int v[NMAX];
int dp[NMAX];
int poz[NMAX], tata[NMAX];

void afisare(int nod) {
    if (nod) {
        afisare(tata[nod]);
        fout << v[nod] << ' ';
    }
}

int main() {
    int n;
    fin >> n;

    int k = 0;
    for (int i = 1; i <= n; ++i) {
        fin >> v[i];

        int st = 0, dr = k + 1;
        while (dr - st > 1) {
            int mij = (st + dr) / 2;
            if (v[i] > dp[mij]) {
                st = mij;
            } else {
                dr = mij;
            }
        }

        if (dr == k + 1) {
            k++;
        }

        dp[dr] = v[i];
        poz[dr] = i;
        tata[i] = poz[dr - 1];
    }

    fout << k << '\n';
    afisare(poz[k]);
    return 0;
}