Cod sursa(job #3162167)

Utilizator Constantin.Dragancea Constantin Constantin. Data 28 octombrie 2023 15:00:30
Problema Subsir crescator maximal Scor 15
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb

#include <iostream>
#include <fstream>
using namespace std;

int binsearch(int arr[], int L, int R, int x){
    int l = L, h = R;

    while (l != h){
        int m = (l + h) / 2;

        if (x <= arr[m]){
            h = m;
        } else {
            l = m + 1;
        }
    }

    return l;
}

int main(){
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    int N;
    cin >> N;

    int A[N + 1];
    for(int i = 0; i < N; i++){
        cin >> A[i];
    }

    const int inf = (1 << 30);
    int n, m, l;
    int M[N];

    A[N] = inf;
    n = m = l = 0;

    M[0] = A[0];
    for (int i = 1; i < N; i++)
        M[i] = inf;

    while (n != N){
        m = max(m, l + 1);

        l = binsearch(M, 0, m + 1, A[n + 1]);

        M[l] = min(M[l], A[n + 1]);

        n = n + 1;
    }

    cout << m;

    return 0;
}