Cod sursa(job #3212818)

Utilizator AswVwsACamburu Luca AswVwsA Data 12 martie 2024 10:41:11
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#include <vector>
#define ll long long
using namespace std;

const int NMAX = 100000;

int a[NMAX + 1];
int sol[NMAX + 1];
int urm[NMAX + 1];

ifstream cin("scmax.in");
ofstream cout("scmax.out");

void print_sol(int ind)
{
    if (urm[ind] != 0)
        print_sol(urm[ind]);
    cout << a[ind] << " ";
}

signed main()
{
    int n, i;
    cin >> n;
    for (i = 1; i <= n; i++)
        cin >> a[i];
    int dim = 0;
    for (i = 1; i <= n; i++)
    {
        int st = 1, dr = dim, poz = 0;
        while (st <= dr)
        {
            int med = ((st + dr) >> 1);
            if (a[sol[med]] < a[i])
            {
                poz = med;
                st = med + 1;
            }
            else
                dr = med - 1;
        }
        if (poz + 1 > dim)
            sol[++dim] = i;
        else
            sol[poz + 1] = i;
        urm[i] = sol[poz];
    }
    cout << dim << "\n";
    print_sol(sol[dim]);
}