Cod sursa(job #2228125)

Utilizator rnqftwcalina florin daniel rnqftw Data 2 august 2018 19:06:42
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<bits/stdc++.h>

using namespace std;

ifstream in("scmax.in");
ofstream out("scmax.out");

#define mx 100007

int index[mx] , pre[mx] , sequence[mx] , length , ans[mx];

int main(){

    int n ;

    in >> n ;

    for(int i = 0 ; i < n ; i ++ )
        in >> sequence[i] ;
    int l , r  , mid;
    for(int i = 0 ; i < n ; i ++){
        //binary search
        l = 1 ;
        r = length ;
        while(l <= r ){
            mid = (l+r) / 2 ;
            if(sequence[index[mid]] < sequence[i])
                l = mid + 1 ;
            else r = mid - 1 ;
        }
        //update
        index[l] = i ;
        pre[i] = index[l - 1];

        if(l > length)
            length = l ;
    }

    out << length <<'\n';

    int j = index[length];

    for(int i = 0 ; i < length ; i ++){
        ans[length - i - 1] = sequence[j];
        j = pre[j];
    }

    for(int i = 0 ; i < length ; i++ )
        out << ans[i] << " " ;

    in.close();
    out.close();
}