Cod sursa(job #2565432)

Utilizator marius004scarlat marius marius004 Data 2 martie 2020 14:13:53
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <fstream>

std::ifstream f("scmax.in");
std::ofstream g("scmax.out");

const int NMAX = 100005;
int n,v[NMAX],t[NMAX],d[NMAX],len;

void reconst(int index){

    if(t[index])
        reconst(t[index]);

    g << v[index] << ' ';
}

int main(){

    f >> n;

    for(int i = 1;i <= n;++i)
        f >> v[i];

    d[1] = len = 1;

    for(int i = 2;i <= n;++i){

        int left = 1;
        int right = len;

        while(left <= right){

            int mid = (left + right) / 2;

            if(v[d[mid]] < v[i])
                left = mid + 1;
            else
                right = mid - 1;
        }

        int pos = left;

        if(pos > len){
            len++;
            d[len] = i;
            t[d[len]] = d[pos - 1];
        }else{
            d[pos] = i;
            t[d[pos]] = d[pos - 1];
        }
    }

    g << len << '\n';
    reconst(d[len]);

    return 0;
}