Cod sursa(job #3261639)

Utilizator MorariuTMorariu MorariuT Data 7 decembrie 2024 09:46:38
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
#include <set>
#include <map>
#include <algorithm>
#define MAX 2000000001

using namespace std;

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

int main()
{
    int n; cin >> n;
    vector<int> v(n);
    vector<int> b(n + 1, MAX);
    vector<int> dp(n + 1, 0);

    for(int i = 0;i < n;cin >> v[i++]);


    for(int i = 0;i < n;i++)
    {
        vector<int>::iterator it = lower_bound(b.begin(), b.end(), v[i]);
        int pos = it - b.begin();

        b[pos] = v[i];
        dp[i] = pos + 1;
    }

    cout << *max_element(dp.begin(), dp.end()) << endl;

    int mx = *max_element(dp.begin(), dp.end());

    vector<int> ans;

    for(int i = n - 1;i >= 0;i--)
    {
        if(mx == dp[i])
        {
            ans.push_back(v[i]);
            mx--;
        }
    }

    for(int i = ans.size() - 1;i >= 0;i--) cout << ans[i] <<  " ";
    // for(int i = 0;i < n;i++)
    // {
    //     if(b[i] == MAX) break;

    //     cout << b[i] << " ";
    // }


}