Cod sursa(job #2306924)

Utilizator OctavianVasileVasileOctavian OctavianVasile Data 23 decembrie 2018 11:37:02
Problema Subsir crescator maximal Scor 100
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], prevv [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])prevv [i] = M [k], M [++ k] = i;
        else{
            ind = Bs (c [i], c);
            prevv [i] = M [ind - 1];
            M [ind] = i;
        }
    }
}
void func (int poz){
    if (prevv [poz] > 0)func (prevv [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;
}