Cod sursa(job #2574628)

Utilizator bogdanvladmihaiBogdan Vlad-Mihai bogdanvladmihai Data 6 martie 2020 00:48:32
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MAX_N = 1e5 + 5;

int n, cnt;

int dad[MAX_N], v[MAX_N], pos[MAX_N];

void solve(int t) {
  if (dad[t] == 0) {
    fout << v[t] << " ";
    return;
  }
  solve(dad[t]);
  fout << v[t] << " ";
}

int main() {
  int lo, ri, ans, mid;
  fin >> n;
  for (int i = 1; i <= n; ++i) {
    fin >> v[i];
    lo = 1;
    ri = cnt;
    ans = 0;
    while (lo <= ri) {
      mid = (lo + ri) / 2;
      if (v[pos[mid]] >= v[i]) {
        ans = mid;
        ri = mid - 1;
      } else {
        lo = mid + 1;
      }
    }
    if (ans == 0) {
      ++cnt;
      ans = cnt;
    }
    pos[ans] = i;
    dad[i] = pos[ans - 1];
  }
  fout << cnt << "\n";
  solve(pos[cnt]);
  return 0;
}