Cod sursa(job #3147739)

Utilizator MCHARDChirila Marian Avram MCHARD Data 26 august 2023 17:15:12
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include<iostream>
#include<fstream>

using namespace std;

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

int a[100010], L[100010], T[100010], n;

void sol(int id){
    if(T[id])
        sol(T[id]);
    g << a[id] << ' ';

}

int main()
{
    int i, p, m, u, mid;

    f >> n;
    for(i=1; i<=n; ++i) f >> a[i];
    f.close();
    m = 1;
    L[1] = 1;
    T[1] = 0;
    for(i=2; i<=n; ++i){
        p = 1;
        u = m;
        while(p <= u){
            mid = p + (u - p) / 2;
            if(a[i] > a[L[mid]]) p = mid + 1;
            else u = mid - 1;
        }
        if(p > m){
            m++;
            L[m] = i;
            T[i] = L[m-1];
        }
        else{
            if(a[i] < a[L[p]]){
                L[p] = i;
                T[i] = L[p-1];
            }
        }
    }
    g << m << '\n';
    sol(L[m]);
    g.close();

    return 0;

}