Cod sursa(job #1904719)

Utilizator nick12nicolae mihalache nick12 Data 5 martie 2017 19:02:31
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;
vector <int> ar;
#define RRR ios_base::sync_with_stdio(false);cin.tie(0);

vector <int> LIS()
{
    if (ar.size() == 0)
        return ar;
    vector <int> tail(ar.size(),0);
    int l = 1;
    tail[0] = ar[0];
    for (int i=1;i<ar.size();i++)
    {
        if (ar[i] < tail[0])
            tail[0] = ar[i];
        else if (ar[i]> tail[l+1])
            tail[l++] = ar[i];
        else
            tail[binary_search(tail.begin(),tail.end(),ar[i])] = ar[i];
    }
    return tail;
}

int main()
{
    RRR
    int n;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    cin >> n;
    for (int i=0;i<n;i++)
    {
        int z;
        cin >> z;
        ar.push_back(z);
    }
    vector <int> b = LIS();
    b.erase(unique(b.begin(),b.end()),b.end());
    cout << b.size()-1 << "\n";
    for (int i=0;i<b.size()-1;i++)
    {
        cout << b[i] << " ";
    }
}