Cod sursa(job #3286141)

Utilizator robert_dumitruDumitru Robert Ionut robert_dumitru Data 13 martie 2025 19:12:29
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;

//aproapeperm
ifstream fin("sclm2.in");
ofstream fout("sclm2.out");

int n, m;
int a[100005], aib[100005];
map<int, int> M;

void Update(int val, int p)
{
    while (p <= n)
    {
        aib[p] = max(aib[p], val);
        p += (p & (-p));
    }
}
int Query(int p)
{
    int Max = -1;
    while (p >= 1)
    {
        Max = max(Max, aib[p]);
        p -= (p & (-p));
    }
    return Max;
}

int main()
{
    int i, x, sol;
    fin >> n;
    for (i = 1; i <= n; i++)
        fin >> a[i];
    for (i = 1; i <= n; i++)
        M[a[i]] = 0;
    for (auto &w : M)
        w.second = ++m;
    for (i = 1; i <= n; i++)
        a[i] = M[a[i]];
    sol = -1;
    for (i = 1; i <= n; i++)
    {
        x = Query(a[i]) + 1;
        Update(x, a[i]);
        sol = max(sol, x);
    }
    fout << sol << "\n";
    return 0;
}