Cod sursa(job #3318754)

Utilizator _.diannaq._Bengescu Diana _.diannaq._ Data 28 octombrie 2025 18:27:34
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <bits/stdc++.h>
using namespace std;

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

int v[100001];
int d[100001];
int poz[100001];
int pred[100001];

int main() {
    const int INF = 2000000000;
    int n;
    fin >> n;

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

    int lung = 0;

    for(int i = 1; i <= n; i++) {
        int a = lower_bound(d + 1, d + lung + 1, v[i]) - d;
        d[a] = v[i];
        poz[a] = i;
        pred[i] = (a > 1 ? poz[a - 1] : 0);

        if (a > lung) lung = a;
    }

    fout << lung << '\n';

    vector<int> sol;
    int x = poz[lung];
    while (x) {
        sol.push_back(v[x]);
        x = pred[x];
    }
    reverse(sol.begin(), sol.end());

    for (int val : sol)
        fout << val << " ";

    return 0;
}