Cod sursa(job #2538686)

Utilizator marius004scarlat marius marius004 Data 4 februarie 2020 22:21:13
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

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

const int NMAX = 100'005;
int n,len,v[NMAX],t[NMAX],d[NMAX];

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];
    
    len = d[1] = 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])
                right = mid - 1;
            else
                left = 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;
}