Cod sursa(job #2564727)

Utilizator Fatu_SamuelFatu Samuel Fatu_Samuel Data 2 martie 2020 09:48:06
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax = 100005;

int v[nmax], l[nmax], p[nmax];
int n, k;

int cb (int l[], int len, int e)
{
    int st = 1, dr = len, mij;


    while (st <= dr)
    {
        mij = (st + dr) / 2;

        if (v[l[mij]] > e)
            dr = mij - 1;
        else if (v[l[mij]] < e)
            st = mij + 1;
        else
            return st;
    }

    return st;
}

void Afis(int s)
{
    if (s)
        Afis(p[s]);
    else
        return;

    fout << v[s] << ' ';
}

int main()
{
    fin >> n;


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

        int pos = cb(l, k, v[i]);

        if (pos <= k)
            l[pos] = i;
        else
            l[++k] = i;

        p[i] = l[pos - 1];
    }

    fout << k << '\n';

    Afis(l[k]);

    fin.close();
    fout.close();
    return 0;
}