Cod sursa(job #3166868)

Utilizator dragoncrackCandidatu Mario Luca dragoncrack Data 9 noiembrie 2023 18:25:50
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#define DIM 100001

using namespace std;

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

int n, v[DIM];
int L[DIM];
int previous[DIM];
int maxLength;

int search(int x) {
    int poz = 0;
    int st = 1;
    int dr = maxLength;
    while (st <= dr) {
        int mid = (st + dr) / 2;
        if (v[L[mid]] < x) {
            poz = mid;
            st = mid + 1;
        }
        else {
            dr = mid - 1;
        }
    }
    return poz;
}

void printRecursive(int index) {
    if (index != 0) {
        printRecursive(previous[index]);
    }
    else return;
    fout << v[index] << " ";
}

int main()
{
    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> v[i];
    }
    L[1] = 1;
    previous[1] = 0;
    maxLength = 1;
    for (int i = 2; i <= n; i++) {
        int poz = search(v[i]);
        poz++;
        L[poz] = i;
        maxLength = max(poz, maxLength);
        previous[i] = L[poz - 1];
    }
    fout << maxLength << "\n";
    printRecursive(L[maxLength]);
}