Cod sursa(job #2714929)

Utilizator Al3ks1002Alex Cociorva Al3ks1002 Data 2 martie 2021 18:56:40
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>

using namespace std;

const int kMaxN = 1e5 + 5;
const int kInf = (1LL << 31) - 1;

int a[kMaxN];
int last[kMaxN];
int where[kMaxN];

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

  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    last[i] = kInf;
  }

  int ans = 1;
  for (int i = 1; i <= n; i++) {
    int index = lower_bound(last + 1, last + n + 1, a[i]) - last;
    last[index] = a[i];
    where[i] = index;
    ans = max(ans, index);
  }
  cout << ans << '\n';

  vector<int> sol;
  for (int i = n; i >= 1; i--) {
    if (where[i] == ans) {
      sol.push_back(a[i]);
      ans--;
    }
  }

  reverse(sol.begin(), sol.end());
  for (auto it : sol) {
    cout << it << " ";
  }

  return 0;
}