Cod sursa(job #2989676)

Utilizator VladPislaruPislaru Vlad Rares VladPislaru Data 6 martie 2023 21:34:28
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, x, nr;
int a[200005];
int dp[200005];
int best[200005];


void CB(int i)
{
    int st, dr, p, mij, x = a[i];
    if (x <= dp[1])
    {
        dp[1] = x;
        best[i] = 1;
        return;
    }

    if (x > dp[nr])
    {
        nr++;
        dp[nr] = x;
        best[i] = nr;
        return ;
    }

    /// caut cea mai din stanga poz. p cu a[i]<= dp[p]
    st = 1; dr = nr; p = nr;
    while (st <= dr)
    {
        mij = (st + dr) / 2;
        if (x <= dp[mij])
        {
            p = mij;
            dr = mij - 1;
        }
        else st = mij + 1;
    }
    dp[p] = x;
    best[i] = p;
}
int main()
{
    fin >> n;
    for (int i = 1; i <= n; i++)
        fin >> a[i];
    best[1] = 1;
    dp[1] = a[1];
    dp[0] = 0;
    nr = 1;
    for (int i = 2; i <= n; i++) {
        CB(i);
    }
    fout << nr << "\n";
    return 0;
}