Cod sursa(job #2306922)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 23 decembrie 2018 11:36:10
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
#define NMAX 100003
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, k, ind;
int v [NMAX], prev [NMAX], M [NMAX];
int Bs (int X, int c [NMAX]){
    int ind = 0, jump = 1 << 20;
    while (jump){
        if (ind + jump <= k && c [M [ind + jump]] < X)
                ind += jump;
        jump /= 2;
    }
    return ind + 1;
}
void SCM (int c [NMAX], int X){
    for (int i = 1; i <= X; i ++){
        if (c [M [k]] < c [i])prev [i] = M [k], M [++ k] = i;
        else{
            ind = Bs (c [i], c);
            prev [i] = M [ind - 1];
            M [ind] = i;
        }
    }
}
void func (int poz){
    if (prev [poz] > 0)func (prev [poz]);
    fout << v [poz] << " ";
}
int main (){
    fin >> n;
    for (int i = 1; i <= n; i ++)fin >> v [i];
    SCM (v, n); fout << k << '\n';
    func (M [k]);
    return 0;
}