Cod sursa(job #2795198)

Utilizator George_CristianGeorge Dan-Cristian George_Cristian Data 6 noiembrie 2021 09:37:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 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 (x <= v[mij])
            dr = mij - 1;
        else
            st = mij + 1;
    }
    return st;
}

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

void afisare() {
    g << lg << '\n';
    int afis[100005], aux = lg;
    for (int i = n; i >= 1; --i)
        if (p[i] == lg) {
            afis[lg] = a[i];
            lg--;
        }
    for (int i = 1; i <= aux; ++i)
        g << afis[i] << ' ';
}

int main() {
    citire();
    parcurgere();
    afisare();
    return 0;
}