Cod sursa(job #2737415)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 4 aprilie 2021 18:49:10
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

#define debug(x) cerr << #x << " = " << x << "\n";

ifstream in("scmax.in");
ofstream out("scmax.out");

const int max_n = (int)1e5 + 5;

int n;

int v[max_n];

int dad[max_n];

int cnt;

int pos[max_n];

void gen(int u) {
  if (!dad[u]) {
    out << v[u] << " ";
    return;
  }
  gen(dad[u]);
  out << v[u] << " ";
}

int main() {
  in >> n;
  for (int i = 1; i <= n; i++) {
    in >> v[i];
  }
  for (int i = 1; i <= n; i++) {
    int l = 1, r = cnt, ans = 0;
    while (l <= r) {
      int m = (l + r) / 2;
      if (v[pos[m]] >= v[i]) {
        ans = m;
        r = m - 1;
      } else {
        l = m + 1;
      }
    }
    if (ans == 0) {
      cnt++;
      ans = cnt;
    }
    pos[cnt] = i;
    dad[i] = pos[cnt - 1];
  }
  out << cnt << "\n";
  gen(pos[cnt]);
  return 0;
}