Cod sursa(job #2648360)

Utilizator George_CristianGeorge Dan-Cristian George_Cristian Data 10 septembrie 2020 13:16:56
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>

using namespace std;

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

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

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

int cautare_binara(int nr) {
    int st = 1, dr = lgv, mij;
    while (st <= dr) {
        mij = (st + dr) / 2;
        if (v[mij] < nr)
            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];
        lgv = max(lgv, p[i]);
    }
}

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

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