Cod sursa(job #1967938)

Utilizator o_micBianca Costin o_mic Data 17 aprilie 2017 12:39:53
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>
#include <iostream>
#include <algorithm>
#include <map>
#define DN 100005
using namespace std;
 
ifstream fin("scmax.in");
ofstream fout("scmax.out");

// ifstream fin("input.txt");
// ofstream fout("output.txt");

int s[DN], m;
map<int, int> parent;

void ins(int x) {
    int pos = upper_bound(s, s+m, x-1) - s;
    if (pos == m) {
        s[m++] = x;
    } else {
        s[pos] = x;
    }
    if (pos != 0)
        parent[x] = s[pos-1];
}

void print_sol(int len, int prev) {
    if (len < 0)
        return;
    print_sol(len-1, parent[prev]);
    fout << prev << " ";
}

int main() {
    int n, x;
    fin >> n;
    for (int i = 0; i < n; ++i) {
        fin >> x;
        ins(x);
    }

    fout << m << '\n';
    print_sol(m-1, s[m-1]);
    return 0;
}