Cod sursa(job #3140324)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 5 iulie 2023 15:36:19
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <cassert>

using namespace std;

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

static constexpr int NMAX = (int)(1e5 + 1);

int N;
int k, s[NMAX];

int main()
{
    f.tie(nullptr);

    f >> N;

    for (int i = 1; i <= N; ++i)
    {
        int x = 0;
        f >> x;

        if (!k)
            s[++k] = x;
        else
        {
            if (s[k] < x)
                s[++k] = x;
            else
            {
                int left = 1, right = k;
                int keep = 0;

                while (left <= right)
                {
                    int mid = ((left + right) >> 1);

                    if (s[mid] >= x)
                        keep = mid, right = mid - 1;
                    else
                        left = mid + 1;
                }

                assert(keep >= 1 && keep <= k);

                s[keep] = x;
            }
        }
    }

    g << k << '\n';

    for (int i = 1; i <= k; ++i)
    {
        g << s[i];
        if (i > 1)
            assert(s[i] > s[i - 1]);

        if (i < k)
            g << ' ';
        else
            g << '\n';
    }

    return 0;
}