Cod sursa(job #2648369)

Utilizator Casian_doispeChiriac Casian Casian_doispe Data 10 septembrie 2020 13:37:29
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <fstream>
#include <deque>
#include <vector>
#include <bitset>
#include <queue>
#include <unordered_set>
#include <algorithm>
#include <cmath>

using namespace std ;

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

vector<int> v, p ;

int cb(int x)
{

    int st = 0, dr = v.size() - 1 ;

    while(st <= dr)
    {

        if(v[(st + dr) / 2] > x)
        {

            st = (st + dr) / 2 + 1 ;

        }
        else dr = (st + dr) / 2 - 1 ;

    }

    return (st + dr) / 2 ;

}

void adauga(int x) /// in v caut cel mai mare elem mai mic sau egal, in p punem pozitia din v la care am adaugat elem respectiv
{



}

int main()
{
    int n ;

    cin >> n ;

    for(int f = 1, x ; f <= n ; f ++)
    {

        cin >> x ;

        int mx = -1, mxf = 0 ;

        for(int e = 0 ; e < v.size() ; e ++)
            if(v[e] >= x)mx = max(v[e], mx) ;

        if(mx == -1)
        {

            p.push_back(v.size()) ;

            v.push_back(x) ;

        }
        else
        {

        for(int e = 0 ; e < v.size() ; e ++)
            if(v[e] == mx)mxf = e ;

            v[mxf] = x ;

            p.push_back(mxf) ;
        }

    }

    cout << v.size() << endl ;

    vector<int> aux ;

    for(int f = p.size() - 1, e = v.size() - 1 ; f >= 0 ; f --)
        if(p[f] == e)aux.push_back(v[p[f]]), e -- ;

    for(int f = 0 ; f < aux.size() ; f ++)
        cout << aux[aux.size() - f - 1] << " " ;

    return 0 ;
}