Cod sursa(job #2864697)

Utilizator Mihai7218Bratu Mihai-Alexandru Mihai7218 Data 8 martie 2022 09:35:20
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, i, j, a, m, b, st, dr, poz, k;
vector <int> x, l, sol;
int main()
{
    fin >> n; x.resize(n+1); l.resize(n+1); sol.resize(n+1);
    for (i = 1; i <= n; ++i)
        fin >> x[i];
    k = 0; sol[0] = 0;
    for (i = 1; i <= n; ++i)
    {
        if (x[i] > sol[k]) sol[++k] = x[i], l[i] = k;
        else
        {
            st = 1; dr = k; poz = k;
            while (st <= dr)
            {
                m = (st+dr)/2;
                if (sol[m] < x[i]) st = m+1;
                else poz = m, dr = m-1;
            }
            sol[poz] = x[i];
            l[i] = poz;
        }
    }
    fout << k << '\n';
    for (i = n; i > 0 && k > 0; --i)
        if (l[i] == k) sol[++j] = x[i], --k;
    for (i = j; i > 0; --i)
        fout << sol[i] << ' ';
    return 0;
}