Cod sursa(job #2659268)

Utilizator martinmiere133Cranga Antonio martinmiere133 Data 16 octombrie 2020 13:24:52
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>
#include <list>
#include <map>
#include <math.h>
#define NMAX 100001
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int main() {
    int n;
    f>>n;
    vector<int> stack , index , parent(n) , v(n);
    for(int i=0;i<n;i++)
    {
        f>>v[i];
        auto pos = lower_bound(stack.begin(), stack.end(), v[i]) - stack.begin();
        if(pos == 0)parent[i] = - 1;
        else parent[i] = index[pos-1];
        if(pos == stack.size())
        {
            stack.push_back(0);
            index.push_back(0);
        }
        stack[pos] = v[i];
        index[pos] = i;
    }
    vector<int>sol;
    for(int i= index.back() ; i!=-1 ; i=parent[i])
    sol.push_back(i);
    
    g<<sol.size()<<'\n';
    for(auto it = sol.rbegin() ; it!=sol.rend() ; it++)
    g<<v[*it]<<" ";
    return 0;
}