Cod sursa(job #2755746)

Utilizator Bogdan.paun50Mandresi Bogdan Bogdan.paun50 Data 28 mai 2021 01:17:42
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>
#include <algorithm>
#define DIM 100005

using namespace std;

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

int n;

int v[DIM], Sol[DIM], dp[DIM], t[DIM];

int main() {

    fin >> n;

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

    int l = 0;

    for (int i = 1; i <= n; ++i) {

        int st = 1, dr = l, val = v[i];

        bool ok = true;

        while (st <= dr) {

            int mid = (st + dr) / 2;

            if (v[dp[mid]] == val) {
                ok = false;
                break;
            }

            if (v[dp[mid]] < val)
                st = mid + 1;
            else
                dr = mid - 1;

        }

        if (!ok)
            continue;

        if (st == l + 1) {
            dp[++l] = i;
            t[i] = dp[l - 1];
        }
        else
        if (st == 1) {
            dp[1] = i;
            t[i] = 0;
        }
        else {
            dp[st] = i;
            t[i] = dp[st - 1];
        }

    }

    fout << l << '\n';

    int sol = 0;

    for (int i = dp[l]; i; i = t[i])
        Sol[++sol] = v[i];

    for (int i = sol; i; --i)
        fout << Sol[i] << ' ';

    return 0;
}