Cod sursa(job #2306963)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 23 decembrie 2018 13:54:46
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
const int NMAX = 100005;
const int INF = 2000000005;
int n, poz, ret, k;
int v [NMAX], M [NMAX], prevv [NMAX];
int CB (int X){
    int st = 1, dr = NMAX - 4;
    while (st <= dr){
        int mij = (st + dr) / 2;
        if (X <= v [M [mij]])
            dr = mij - 1, ret = mij;
        else st = mij + 1;
    }
    return ret;
}
int main(){
    fin >> n; v [n + 1] = INF;
    for (int i = 1; i <= NMAX - 3; i ++)M [i] = n + 1;
    for (int i = 1; i <= n; i ++)fin >> v [i];
    for (int i = 1; i <= n; i ++){
        poz = CB (v [i]);
        M [poz] = i;
        prevv [i] = M [poz - 1];
    }
    for (int i = 1; i <= n + 1; i ++)
        if (M [i] == n + 1){k = i - 1; break;}
    fout << k << '\n';
    for (int i = 1; i <= k; i ++)fout << v [M [i]] << " ";
    return 0;
}