Submission #680036

#TimeUsernameProblemLanguageResultExecution timeMemory
680036MattTheNubWall (IOI14_wall)C++17
0 / 100
140 ms14044 KiB
#include "wall.h"
#include <bits/stdc++.h>

using namespace std;

template <class T> using v = vector<T>;

struct Node {
  int dec, inc;

  void cinc(int val) {
    if (dec < val) {
      dec = val;
    }
    inc = max(inc, val);
  }
  void cdec(int val) {
    if (inc > val) {
      inc = val;
    }
    dec = min(dec, val);
  }
};

// h=0, increase to 2, decrease to 1 -> 1
// h=0, decrease to 1, increase to 2 -> 2
// order matters

template <class T> struct Seg {
  // TODO: implement
  const T ID = {0, 0}; // comb(ID,b) = b
  T comb(T a, T b) {}

  int n;
  v<T> seg;
  void init(int _n) {
    n = _n;
    seg.assign(2 * n, ID);
  }
  void push(int p) {}
  // void pull(int p) { seg[p] = comb(seg[2 * p], seg[2 * p + 1]); }
  // void upd(int p, T val) { // set val at position p
  //   seg[p += n] = val;
  //   for (p /= 2; p; p /= 2)
  //     pull(p);
  // }
  void inc(int l, int r, int val) {
    for (l += n, r += n + 1; l < r; l /= 2, r /= 2) {
      if (l & 1)
        seg[l++].cinc(val);
      if (r & 1)
        seg[--r].cinc(val);
    }
  }
  void dec(int l, int r, int val) {
    for (l += n, r += n + 1; l < r; l /= 2, r /= 2) {
      if (l & 1)
        seg[l++].cdec(val);
      if (r & 1)
        seg[--r].cdec(val);
    }
  }
  T get(int p) { return seg[p + n]; }
};

void buildWall(int n, int k, int op[], int left[], int right[], int height[],
               int finalHeight[]) {

  Seg<Node> w;
  w.init(n);
  for (int i = 0; i < k; i++) {
    if (op[i] == 1) {
      w.inc(left[i], right[i], height[i]);
    } else {
      w.dec(left[i], right[i], height[i]);
    }
  }

  for (int i = 0; i < n; i++) {
    finalHeight[i] = w.get(i).inc;
  }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...