Cod sursa(job #3304947)

Utilizator paulihno15Ciumandru Paul paulihno15 Data 28 iulie 2025 22:01:09
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>
#define NMAX 100000
#define ll long long

using namespace std;

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

int n, lmax;
int a[NMAX + 2], sir[NMAX + 2], poz[NMAX + 2], sol[NMAX + 2];

int main() {
    ios_base::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

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

    lmax = 1;
    sir[1] = a[1];
    poz[1] = 1;
    for (int i = 2; i <= n; i++) {
        if (a[i] > sir[lmax]) {
            sir[++lmax] = a[i];
            poz[i] = lmax;
        }
        else {
            int st = 1, dr = lmax, p = 0;
            while (st <= dr) {
                int mij = (st + dr) >> 1;
                if (sir[mij] >= a[i]) {
                    p = mij;
                    dr = mij - 1;
                }
                else {
                    st = mij + 1;
                }
            }
            sir[p] = a[i];
            poz[i] = p;
        }
    }

    fout << lmax << '\n';

    for (int j = n, i = lmax; i; j--) {
        if (poz[j] == i) {
            sol[i] = a[j];
            i--;
        }
    }

    for (int i = 1; i <= lmax; i++) {
        fout << sol[i] << ' ';
    }
    return 0;
}