Cod sursa(job #2596154)

Utilizator CharacterMeCharacter Me CharacterMe Data 9 aprilie 2020 12:46:50
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

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

int n;
int nums[100005], last[100005];
set<pair<int, int> > scmax;
set<pair<int, int> >::iterator it;

void dfs(int pos);

int main()
{

    fin >> n;

    for(int i = 1; i <= n; ++i){
        fin >> nums[i];

        it = scmax.upper_bound({nums[i], -1});
        if(it == scmax.end()) scmax.insert({nums[i], i});
        else{
            scmax.erase(it);
            scmax.insert({nums[i], i});
        }

        it = scmax.find({nums[i], i});

        if(it != scmax.begin()){
            --it;
            last[i] = (*it).second;
        }
    }

    fout << scmax.size() << "\n";
    it = scmax.end();
    --it;

    dfs((*it).second);

    return 0;
}

void dfs(int pos){
    if(!pos) return;

    dfs(last[pos]);
    fout << nums[pos] << " ";

}