Cod sursa(job #2815444)

Utilizator Tudor_PascaTudor Pasca Tudor_Pasca Data 9 decembrie 2021 17:08:39
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

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

const int N_MAX = 1e5;
const int INF = 2e9 + 5;

int n, k, scm_end;
int v[N_MAX + 5], p[N_MAX + 5];
vector<int> L(N_MAX + 5, 0), L_id(N_MAX + 5, 0);

void print_scm(int i)
{
    //cout << i << ' ' << p[i] << '\n';
    if(p[i] == -1)
    {
        out << v[i] << ' ';
        return;
    }
    print_scm(p[i]);
    out << v[i] << ' ';
}

int main()
{
    in >> n;
    for(int i = 0; i < n; i++)
        in >> v[i];

    for(int i = 0; i < n; i++)
    {
        int pos = lower_bound(L.begin(), L.begin() + k, v[i]) - L.begin();

        L[pos] = v[i];
        L_id[pos] = i;

        p[L_id[pos]] = (pos > 0 ? L_id[pos - 1] : -1);

        if(pos == k)
        {
            k++;
            scm_end = L_id[pos];
        }

        /*
        cout << "ELEMENT: " << i << ' ' << v[i] << ' ' << k << '\n';
        cout << "ELEMENT | INDEX | PARENT\n";
        for(int j = 0; j < k; j++)
            cout << L[j] << ' ' << L_id[j] << ' ' << p[j] << '\n';
        cout << "\n\n";
        */
    }

    out << k << '\n';
    print_scm(scm_end);
    out << '\n';

    return 0;
}