Cod sursa(job #2723372)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 13 martie 2021 22:44:46
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <cstdlib>

using namespace std;

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

const int NMAX = 100005;
const int INF = 2e9;

vector<int>sol;
int v[NMAX];
vector<int>best;
int lg[NMAX];
int n, k = 0;

int main()
{
    ios_base::sync_with_stdio(false);
    fin.tie(0);fout.tie(0);

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

    lg[1] = 1;
    best.push_back(v[1]);

    int ma = 0;

    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;
        }
        *it = v[i];
        lg[i] = it-best.begin()+1;
        ma = max(ma, lg[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 e:sol)
        fout << e << ' ';

    return 0;
}