Cod sursa(job #3298064)

Utilizator Dragu_AndiDragu Andrei Dragu_Andi Data 26 mai 2025 16:39:12
Problema Subsir crescator maximal Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 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;
        if (valMin[p - 1] < v[i] && v[i] < valMin[p])
        {
            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;
}