Cod sursa(job #2878038)

Utilizator dragutamihai1234Draguta Mihai dragutamihai1234 Data 25 martie 2022 18:36:03
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>

using namespace std;

int d[100001], p[100001], sol[100001], v[100001], k;

int cautbin(int n)
{
    int p = 1, u = k, sol = k + 1;
    while(p <= u)
    {
        int m = (p + u) / 2;
        if(d[m] >= n)
        {
            sol = m;
            u = m - 1;
        }
        else
            p = m + 1;
    }
    return sol;
}

int main()
{
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    int A, n;
    cin >> n;
    for(int i = 1; i <= n; i++)
    {
        cin >> A;
        if(d[k] < A)
        {
            d[++k] = A;
            p[i] = k;
        }
        else
        {
            int poz = cautbin(A);
            d[poz] = A;
            p[i] = poz;
        }
        v[i] = A;
    }
    for(int i = k ; i >= 1 ; i--)
    {
        while(p[n] != i)
            n --;
        sol[i] = v[n];
    }
    cout << k << '\n';
    for(int i = 1; i <= k; i++)
        cout << sol[i] << ' ';
    return 0;
}