Cod sursa(job #2195943)

Utilizator Constantin.Dragancea Constantin Constantin. Data 17 aprilie 2018 20:40:41
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.66 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
const int N = 100010;
int n, a[N], M[N], bst, k, pr[N];

void afis(int q){
    if (pr[q]) afis(pr[q]);
    out << a[q] << " ";
}

int main(){
    in >> n;
    for (int i=1; i<=n; i++) in >> a[i];
    for (int i=1; i<=n; i++){
        int st = 0, dr = bst;
        while (st <= dr){
            int mid = (st + dr) >> 1;
            if (a[i] > a[M[mid]]) st = mid + 1;
            else dr = mid - 1;
        }
        pr[i] = M[st-1];
        M[st] = i;
        bst = max(bst, st);
    }
    out << bst << "\n";
    afis(M[bst]);
    return 0;
}