Cod sursa(job #2983142)

Utilizator Edyci123Bicu Codrut Eduard Edyci123 Data 21 februarie 2023 18:34:52
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#define DIM 100006

using namespace std;

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

int n, k, v[DIM], v1[DIM], l[DIM], ans[DIM];

int cb(int val) {
    int st = 1, dr = k, poz = k + 1;
    while (st <= dr) {
        int mid = (st + dr) / 2;
        if (v1[mid] >= val) {
            dr = mid - 1;
            poz = mid;
        } else {
            st = mid + 1;
        }
    }

    return poz;
}

int main() {
    f >> n;
    for (int i = 1; i <= n; i++) {
        f >> v[i];
        int poz = cb(v[i]);
        v1[poz] = v[i];
        l[i] = poz;
        if (poz == k + 1) {
            k++;
        }
    }

    g << k << "\n";
    int lg = k, i = n;

    while (lg) {
        if (l[i] == lg) {
            ans[lg] = v[i];
            lg--;
        }
        i--;
    }

    for (int i = 1 ; i <= k; i++) {
        g << ans[i] << " ";
    }

    return 0;
}