Cod sursa(job #2739196)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 7 aprilie 2021 07:18:48
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

const int NMAX = 100005;

int n;

int v[NMAX], lg[NMAX];
vector<int>best;
vector<int>sol;

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(0);fout.tie(0);
    int ma = 0;
    fin >> n;
    for(int i = 1 ; i <= n ; i++)
        fin >> v[i];
    lg[1] = 1;
    best.push_back(v[1]);
    for(int i = 2 ; i <= n ; i++)
    {
        vector<int>::iterator it = lower_bound(best.begin(),best.end(),v[i]);
        if(it == best.end())
        {
            best.push_back(v[i]);
            lg[i] = best.size();
            ma = max(ma, lg[i]);
            continue;
        }
        int pos = it-best.begin()+1;
        lg[i] = pos;
        *it = v[i];
    }
    int cnt = ma;
    fout << ma << '\n';
    for(int i = n ; i >= 1 ; i--)
        if(lg[i] == cnt)
            {
                sol.push_back(v[i]);
                cnt--;
            }
    reverse(sol.begin(),sol.end());
    for(int i = 0 ; i < sol.size() ; i++)
        fout << sol[i] << ' ';
    fout << '\n';
    return 0;
}