Cod sursa(job #3144865)

Utilizator EricDimiC. Eric-Dimitrie EricDimi Data 10 august 2023 22:54:28
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#define oo 100005

using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int A[oo], D[oo], P[oo], I[oo], n, k;

int main()
{
    f >> n;
    for (int i = 1; i <= n; i++)
        f >> A[i];

    k = 1; D[k] = A[1]; P[1] = 1;

    for (int i = 2 ; i <= n ; i ++)
        if (A[i] > D[k])
            D[++k] = A[i], P[i] = k;
        else
        {
            int st = 1 , dr = k , p = k + 1;
            while (st <= dr)
            {
                int m = (st + dr) / 2;
                if (D[m] > A[i])
                    p = m, dr = m - 1;
                else
                    st = m + 1;
            }
            D[p] = A[i];
            P[i] = p;
        }
    int j = n;
    for (int i = k ; i >= 1 ; i --)
    {
        while (P[j] != i)
            j --;
        I[i] = j;
    }

    int cnt = 0;

    for (int i = 1; i <= n; i++)
        {
            if (I[i] != 0)
                cnt++;
            else
                break;
        }

    g << cnt << "\n";
    for (int i = 1; i <= cnt; i++)
        g << A[I[i]] << " ";

    f.close();
    g.close();

    return 0;
}