Cod sursa(job #2988361)

Utilizator juniorOvidiu Rosca junior Data 4 martie 2023 04:46:54
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

using namespace std;

const int infinit = 2e9 + 1;
const int MAX = 100002;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, i, nr, s, d, m, vm[MAX], p, a[MAX], lmax;
// v[i] = valoarea minima cu care se termina un subsir strict crescator de lungime i

int main() {
    fin >> n;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    for (i = 1; i <= n + 1; i++)
        vm[i] = infinit;
    for (i = 1; i <= n; i++) {
        s = 0, d = i + 1;
        while (s + 1 < d) {
            m = (s + d) / 2;
            if (vm[m] < a[i])
                s = m;
            else
                d = m;
        }
        if (vm[d] > a[i])
            vm[d] = a[i];
    }
    lmax = n + 1;
    while (vm[lmax] == infinit)
        lmax--;
    fout << lmax;
}