Cod sursa(job #3298063)

Utilizator Dragu_AndiDragu Andrei Dragu_Andi Data 26 mai 2025 16:36:59
Problema Subsir crescator maximal Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int nmax = 1e5 + 1;
int v[nmax], valMin[nmax], pos[nmax], tati[nmax], len = 0;

int main() {
    int n;
    fin >> n;
    for(int i = 1; i <= n; i++)
        fin >> v[i];
    for(int i = 1; i <= n; i++)
        valMin[i] = 1e9;
    for(int i = 1; i <= n; i++)
    {
        int p = lower_bound(valMin + 1, valMin + n + 1, v[i]) - valMin;
        valMin[p] = v[i];
        pos[p] = i;
        tati[i] = pos[p - 1];
        len = max(len, p);
    }

    fout << len << '\n';
    int cur = pos[len];
    int sol[nmax], lencur = 0;
    while(cur)
    {
        sol[lencur++] = v[cur];
        cur = tati[cur];
    }
    for (int i = lencur - 1; i >= 0; i--)
        fout << sol[i] << ' ';
    return 0;
}