Cod sursa(job #2449495)

Utilizator ejoi2019Ejoi 2019 ejoi2019 Data 19 august 2019 22:38:13
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>

using namespace std;

const int N = 100001;
int n;
int a[N];
int w[N], t = 0;
int p[N];
int o[N];

int main() {
  freopen ("scmax.in", "r", stdin);
  freopen ("scmax.out", "w", stdout);

  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d", &a[i]);
    if (a[w[t]] < a[i]) {
      p[i] = w[t];
      w[++t] = i;
    } else {
      int l = 1, r = t;
      int L = 1;
      while (l <= r) {
        int m = (l + r) / 2;
        if (a[w[m]] < a[i]) {
          l = m + 1;
        } else {
          r = m - 1;
          L = m;
        }
      }
      p[i] = w[L - 1];
      w[L] = i;
    }
  }

  printf("%d\n", t);
  int i = w[t], P = t;
  while (P) {
    o[P--] = i;
    i = p[i];
  }

  for (int i = 1; i <= t; i++)
    printf("%d ", a[o[i]]);
  printf("\n");

  return 0;
}