Cod sursa(job #2808806)

Utilizator iancupoppPopp Iancu Alexandru iancupopp Data 25 noiembrie 2021 16:14:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

const int N = 1e5 + 5;

int v[N], l[N];
vector<int> vmin;

int main() {
  ifstream cin("scmax.in");
  ofstream cout("scmax.out");
  int n;
  cin >> n;
  for (int i = 0; i < n; ++i)
    cin >> v[i];
  cin.close();
  l[0] = 1;
  vmin.push_back(v[0]);
  for (int i = 1; i < n; ++i) {
    auto it = lower_bound(vmin.begin(), vmin.end(), v[i]);
    if (it == vmin.end()) {
      vmin.push_back(v[i]);
      l[i] = vmin.size();
    } else {
      *it = v[i];
      l[i] = it - vmin.begin() + 1;
    }
  }
  int lg = vmin.size();
  cout << lg << "\n";
  vector<int> ans;
  for (int i = n - 1; i >= 0; --i)
    if (l[i] == lg) {
      ans.push_back(v[i]);
      --lg;
    }
  for (int i = ans.size() - 1; i >= 0; --i)
    cout << ans[i] << " ";
  cout.close();
  return 0;
}