Cod sursa(job #2709017)

Utilizator George_CristianGeorge Dan-Cristian George_Cristian Data 19 februarie 2021 17:16:21
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int n, a[100005], v[100005], p[100005],lg;

void citire() {
    f >> n;
    for (int i = 1; i <= n; ++i)
        f >> a[i];
}

int cautare_binara(int x) {
    int st = 1, dr = lg, mij;
    while (st <= dr) {
        mij = (st + dr) / 2;
        if (v[mij] < x)
            st = mij + 1;
        else
            dr = mij - 1;
    }
    return st;
}

void parcurgere() {
    for (int i = 1; i <= n; ++i) {
        p[i] = cautare_binara(a[i]);
        v[p[i]] = a[i];
        lg = max(lg, p[i]);
    }
}

void afisare(int poz, int nr) {
    if (!nr)
        return;
    for (;; poz--)
        if (p[poz] == nr) {
            afisare(poz - 1, nr - 1);
            g << a[poz] << ' ';
            return;
        }
}

int main() {
    citire();
    parcurgere();
    g << lg << '\n';
    afisare(n, lg);
    return 0;
}