Cod sursa(job #2391141)

Utilizator Constantin.Dragancea Constantin Constantin. Data 28 martie 2019 18:07:28
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>
using namespace std;

#define N 100005
int n, M[N], k, prv[N], a[N];
ifstream in ("scmax.in");
ofstream out ("scmax.out");

int bs(int val){
    int st = 1, dr = k;
    while (st <= dr){
        int mid = (st + dr) >> 1;
        if (a[M[mid]] < val) st = mid + 1;
        else dr = mid - 1;
    }
    return st;
}

void show(int q){
    if (!q) return;
    show(prv[q]);
    out << a[q] << ' ';
}

int main(){
    in >> n;
    for (int i=1, x; i<=n; i++){
        in >> a[i];
        int idx = bs(a[i]);
        prv[i] = M[idx-1];
        if (idx > k) k = idx, M[k] = i;
        else if (a[i] < a[M[idx]]) M[idx] = i;
    }
    out << k << '\n';
    show(M[k]);
    return 0;
}