Cod sursa(job #2587203)

Utilizator blotucosmincosmin blotucosmin Data 22 martie 2020 14:22:51
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#define NMAX 100005

using namespace std;

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

int v[NMAX], poz[NMAX], rez[NMAX], n, i, st, dr, mij, nr = 1, p, k;

int main()
{
    f >> n;
    for(i = 1; i <= n; ++ i)
        f >> v[i];
    rez[1] = v[1];
    poz[1] = 1;
    for(i = 2; i <= n; ++ i)
    {
        p = -1;
        st = 1;
        dr = nr;
        while(st <= dr)
        {
            mij = (st + dr) / 2;
            if(rez[mij] < v[i])
                st = mij + 1;
            else
            {
                p = mij;
                dr = mij - 1;
            }
        }
        if(p == -1)
        {
            rez[++ nr] = v[i];
            poz[i] = nr;
        }
        else
        {
            poz[i] = p;
            rez[p] = v[i];
        }
    }
    g << nr << "\n";
    for(i = n; i >= 1; i --)
        if(poz[i] == nr)
        {
            rez[++ k] = v[i];
            nr --;
        }
    for(i = k; i >= 1; i --)
        g << rez[i] << " ";
    return 0;
}