Cod sursa(job #2930632)

Utilizator tiut_cristianTiut Cristian tiut_cristian Data 28 octombrie 2022 23:14:38
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#include <vector>

using namespace std;

const int INF = 30000;

int caut_bin(vector<int> &q, int &len, int val)
{
    int st = 1, dr = len+1;
    while(st < dr)
    {
        int m = (st + dr) / 2;
        if(val == q[m])
            return m;
        else if(val < q[m])
            dr = m;
        else
            st = m+1;
    }

    if (dr > len)
        q[++len+1] = INF;
    q[st] = val;
    return st;
}

int main()
{
    ifstream fin("scmax.in");
    ofstream fout("scmax.out");

    int n;
    fin >> n;

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

    vector<int> p(n + 1), q(n + 1);
    int len = 0;
    q[1] = INF;
    for (int i = 1; i <= n; i++)
        p[i] = caut_bin(q, len, v[i]);

    vector<int> s(len+1);
    int j = n;
    for (int i = len; i >= 1; i--)
    {
        while (p[j] != i)
            j--;
        s[i] = v[j];
    }

    fout << len << '\n';
    for(int i = 1; i <= len; i++)
        fout << s[i] << ' ';

    return 0;
}