Cod sursa(job #2209054)

Utilizator EclipseTepes Alexandru Eclipse Data 1 iunie 2018 16:57:37
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <iostream>
#include <fstream>
#define dMAX 100000

using namespace std;

int n, arr[dMAX + 2];
int parent[dMAX + 2];
int LIS[dMAX + 2], idx;
int finalLIS[dMAX + 2];
int l, r, middle, pos, k;

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

int main()
{
    int i, j;
    fin >> n;
    for (i = 1; i <= n; i++) fin >> arr[i];
    for (i = 1; i <= n; i++) {
        l = 1, r = idx;
        while (l <= r) {
            middle = (l + r) / 2;
            if (arr[LIS[middle]] < arr[i]) l = middle + 1;
            else r = middle - 1;
        }
        pos = l;
        parent[i] = LIS[pos - 1];
        LIS[pos] = i;
        idx = max(idx, pos);
    }
    k = LIS[idx];
    for (i = idx; i >= 1; i--) {
        finalLIS[i] = arr[k];
        k = parent[k];
    }
    fout << idx << '\n';
    for (i = 1; i <= idx; i++) fout << finalLIS[i] << ' ';

    return 0;
}