Cod sursa(job #3335644)

Utilizator Cezar2009Cezar Mihai Titihazan Cezar2009 Data 23 ianuarie 2026 09:57:00
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
//https://www.infoarena.ro/problema/scmax
#include <bits/stdc++.h>
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int NRMAX = 100000;

int v[NRMAX + 1], d[NRMAX + 1], ret[NRMAX + 1], rez[NRMAX + 1];
int main()
{
    int n, i, j;
    int l = 0, k;
    fin >> n;

    for (i = 1; i <= n; ++i)
    {
        fin >> v[i];

        if (d[l] < v[i])
        {
            d[++l] = v[i];
            ret[i] = l;
            continue;
        }

        if (d[l] == v[i])
            continue;

        int st = 1, dr = l;
        bool sant = 0;

        while (st <= dr)
        {
            int mij = (st + dr) / 2;
            if (v[i] == d[mij])
            {
                sant=1;
                break;
            }

            if (v[i] < d[mij])
                k = mij, dr = mij - 1;
            else
                st = mij + 1;
        }

        if (sant == 0)
            d[k] = v[i], ret[i] = k;
    }

    fout << l << "\n";

    for (i = n, j = l; i >= 1 && j >= 1; --i)
    {
        if (ret[i] == j)
            rez[j--] = v[i];
    }

    for(i = 1; i <= l; ++i)
        fout << rez[i] << " ";


    return 0;
}