Cod sursa(job #2884468)

Utilizator hobbitczxdumnezEU hobbitczx Data 3 aprilie 2022 18:52:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;

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

const int N_MAX = 1e5 + 5;

int n , k;
int d[N_MAX] , p[N_MAX] , a[N_MAX];
vector<int>v;

int main(){
    ios_base::sync_with_stdio(false);
    fin >> n;
    for (int i=1; i<=n; i++){
        fin >> a[i];
    }
    d[1] = a[1] , p[1] = k = 1;
    for (int i=2; i<=n; i++){
        if (a[i] > d[k]){
            d[++k] = a[i];
            p[i] = k;
        }
        else{
            int l = 1 , r = k , poz = k + 1;
            while (l <= r){
                int mid = (l + r) / 2;
                if (d[mid] >= a[i]){
                    poz = mid;
                    r = mid - 1;
                }
                else{
                    l = mid + 1;
                }
            }
            d[poz] = a[i];
            p[i] = poz;
        }
    }
    int j = n;
    for (int i=k; i>0; i--){
        while (p[j] != i){
            j -= 1;
        }
        v.push_back(j);
    }
    reverse(v.begin() , v.end());
    fout << k << '\n';
    for (auto x : v){
        fout << a[x] << " ";
    }
}