Cod sursa(job #1974108)

Utilizator netfreeAndrei Muntean netfree Data 26 aprilie 2017 20:35:43
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.27 kb
#include <bits/stdc++.h>

using namespace std;

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

vector<int> v,q,p;
int n;

int caut_bin (int x){
    int hi= q.size()-1, lo= -1 ,mid;
    while(hi-lo > 1){
        mid = lo + (hi-lo)/2;
        if(q[mid] >= x)
            hi = mid;
        else lo = mid;
    }
    if(q[hi] < x)
        return hi + 1;
    return lo + 1;
}

int main()
{
    fin >> n;
    p.push_back(-100);
    q.push_back(-100);
    v.push_back(-100);

//    q = {0,2,3,7};
//    len = 3;
//
//    cout << caut_bin(3);

    for(int i = 1; i<=n; ++i){
        int nr; fin >> nr; v.push_back(nr);

        if(q.size()-1 == 0){
            q.push_back(nr);
            p.push_back(1);
        }
        else{
            int poz = caut_bin(nr);

            p.push_back(poz);

            if(poz > q.size()-1)
                q.push_back(nr);
            else
                q[poz] = nr;
        }


    }

    int len = q.size() - 1;

    fout << len << "\n";

    vector<int> ans;

    for(int i = p.size()-1; i>=1; --i){
        if(len == p[i]){
            ans.push_back(v[i]);
            len --;
        }
    }

    for(int i = ans.size()-1; i>=0; --i)
        fout << ans[i] << " ";

    return 0;
}