Cod sursa(job #3222604)

Utilizator andiRTanasescu Andrei-Rares andiR Data 11 aprilie 2024 00:05:33
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
// Author: Tanasescu Andrei-Rares
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <queue>
#include <stack>
#include <deque>
#include <iomanip>
#include <vector>
#include <cassert>

#pragma GCC optimize("O3")

#define fi first
#define se second
#define pb push_back
#define pf push_front

using namespace std;

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

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const ll Nmax=1e5+5, inf=1e9+5;

int n, len[Nmax], dr, nr;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    fin>>n;
    while (n--){
        fin>>nr;
        // cautam binar prima lungime a unui subsir pentru care val este mai mica decat ultimul element al sau actual
        int l=1, r=dr, mij, sol=dr+1;
        while (l<=r){
            mij=(l+r)/2;
            if (nr<len[mij]){
                sol=mij;
                r=mij-1;
            }
            else l=mij+1;
        }
        if (len[sol-1]<nr){
            if (sol==dr+1)
                dr++;
            len[sol]=nr;
        }
    }
    fout<<dr;

    return 0;
}