Cod sursa(job #2650182)

Utilizator Casian_doispeChiriac Casian Casian_doispe Data 17 septembrie 2020 17:23:25
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <deque>
#include <vector>
#include <bitset>
#include <queue>
#include <unordered_set>
#include <algorithm>
#include <cmath>

#define MOD 10007

using namespace std ;

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

vector<int> v, fin, poz_pt_recur ;

int lmax()
{

    for(int f = 0 ; f < v.size() ; f ++)
        if(fin.empty() || fin.back() < v[f])fin.push_back(v[f]), poz_pt_recur.push_back(fin.size() - 1) ;
            else poz_pt_recur.push_back(lower_bound(fin.begin(), fin.end(), v[f]) - fin.begin()), fin[poz_pt_recur.back()] = v[f] ;

    return fin.size() ;

}

void recur(int n, int cautatul)
{

    for(int f = n ; f >= 0 ; f --)
    {

        if(poz_pt_recur[f] == cautatul)
        {

            recur(f, cautatul - 1) ;

            cout << v[f] << " " ;

            return ;

        }

    }

}

int main()
{

    int n ;

    cin >> n ;

    vector<int> aux ;

    for(int f = 1, mm ; f <= n ; f ++)
        cin >> mm, v.push_back(mm) ;

    cout << lmax() << endl ;

    recur(poz_pt_recur.size() - 1, fin.size() - 1) ;

    return 0 ;

}

/// pestelee, descdiv