Cod sursa(job #3195643)

Utilizator ReBeGhElRebegea Stefan ReBeGhEl Data 21 ianuarie 2024 13:31:45
Problema Subsir crescator maximal Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#include <stack>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

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

vector < int >  dp;
map < int , int > mp;

int main()
{
    int n,a;
    cin>>n;
    dp.resize(n+2);
    for(int i=1;i<=n+1;i++)
        dp[i]=2000000005;
    int r=1;
    for(int i=1;i<=n;i++){
        cin>>a;
        int x=lower_bound(dp.begin(),dp.begin()+r,a)-dp.begin();
        if(x==n+1)
            continue;
        if(x==r){
            mp[a]=dp[x-1];
            dp[x]=a;
            r++;
            continue;
        }
        mp[a]=dp[x-1];
        dp[x]=a;
    }
    cout<<r-1<<'\n';
    int el=dp[r-1];
    vector < int > ans;
    for(int i=1;i<r;i++)
        {
            ans.push_back(el);
            el=mp[el];
        }
    for(int i=ans.size()-1;i>=0;i--)
        cout<<ans[i]<<" ";
    return 0;
}