Cod sursa(job #3199293)

Utilizator gBneFlavius Andronic gBne Data 1 februarie 2024 12:48:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>

using namespace std;

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

const int OO = (1 << 31) - 1;

int v[100003], d[100003], p[100003];

int main()
{
    int n;
    fin >> n;
    for(int i=1; i<=n; i++){
        fin >> v[i];
        d[i] = OO;
    }
    //d[i] = ultimul element al unui subsir cu i elemente
    int lng  = -1;
    for(int i=1; i<=n; i++){
        auto it = lower_bound(d + 1, d + n + 1, v[i]);
        if(v[i] < *it){
            *it = v[i];
            p[i] = it - d;
            if(it - d > lng){
                lng = it - d;
            }
        }
    }
    fout << lng << '\n';
    stack<int> s;
    int k = lng;
    for(int i=n; i>=0 && k>0; i--){
        if(p[i] == k){
            s.push(v[i]);
            k --;
        }
    }
    while(!s.empty()){
        fout << s.top() << ' ';
        s.pop();
    }
    fout << '\n';
    return 0;
}