Cod sursa(job #3368798)

Utilizator JenJenCristache Ion JenJen Data 15 octombrie 2026 20:08:35
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
using namespace std;

#define MAX 100005
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");

int n;
int v[MAX];
int best[MAX];
int f[MAX];
int rez[MAX];
int k = 0;

int cb(int nr)
{
    int st = 1;
    int dr = k;
    int poz = 0;

    while (st <= dr)
    {
        int mij = (st + dr) >> 1;
        if (v[best[mij]] < nr)
        {
            poz = mij;
            st = mij + 1;
        } else dr = mij - 1;
    }

    return poz;
}

int main()
{
    cin >> n;

    for (int i = 1; i <= n; i++)
    {
        cin >> v[i];
    }

    for (int i = 1; i <= n; i++)
    {
        int poz = cb(v[i]);
        best[poz + 1] = i;
        if (poz == k)
        {
            k++;
        }
        f[i] = best[poz];
    }

    cout << k << '\n';
    int a = best[k];
    int d = 0;

    while(a != 0)
    {
        rez[++d] = v[a];
        a = f[a];
    }

    for (int i = d; i >= 1; i--)
    {
        cout << rez[i] << " ";
    }
}