Cod sursa(job #2865393)

Utilizator radu.Radu Cristi radu. Data 8 martie 2022 19:47:25
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <iostream>
#include <vector>
#define NMAX 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[NMAX], L[NMAX], pred[NMAX], N, maxL = 1;
void read() {
    fin >> N;
    for (int i = 1; i <= N; ++i) {
        fin >> a[i];
    }
}
void solve() {
    int left, right, mid;
    L[maxL] = 1;
    for (int i = 2; i <= N; ++i) {
        left = 1; right = maxL;
        while (left <= right) {
            mid = (left + right) / 2;
            if (a[L[mid]] < a[i]) {
                left = mid + 1;
            }
            else {
                right = mid - 1;
            }
        }
        L[left] = i;
        pred[i] = L[left - 1];
        if (left > maxL) {
            maxL++;
        }
    }
}
void afis() {
    int last = L[maxL];
    fout << maxL << "\n";
    vector<int> v;
    for (int i = last; i > 0; i = pred[i]) {
        v.push_back(a[i]);
    }
    for (int i = v.size() - 1; i >= 0; --i) {
        fout << v[i] << " ";
    }
    fout << "\n";
}
int main()
{
    read();
    solve();
    afis();
    return 0;
}