Cod sursa(job #2296477)

Utilizator alexradu04Radu Alexandru alexradu04 Data 4 decembrie 2018 18:37:25
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

vector< int > x;
vector< int > q;
vector< int > p;

int main()
{
    int n;
    cin >> n;
    x.resize(n);
    p.resize(n);
    for(int i = 0; i < n; i++)
    {
        cin >> x[i];
    }
    vector<int>::iterator it;
    for(int i = 0; i < n; i++)
    {
        it = upper_bound(q.begin(), q.end(), x[i]);
        int poz = (int) (it - q.begin());
        if(poz == q.size())
        {
            q.push_back(x[i]);
        }
        q[poz] = x[i];
        p[i] = poz;
    }
    int cnt = q.size();
    stack<int> st;
    cout<<cnt<<"\n";
    --cnt;
    for(int i=n-1;i>=0;i--)
    {
        if(p[i] == cnt)
        {
            st.push(x[i]);
            cnt--;
        }
    }

    while(!st.empty())
    {
        cout<<st.top()<<" ";
        st.pop();
    }
    return 0;
}