Problem p02345 (C++) — buggy submission, verdict: Runtime Error

#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i < b; i++)
using namespace std;
void _main();
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  _main();
}
//---------------------------------------------------------------------------------------------------
typedef long long ll;
struct dice {
  mt19937 mt;
  dice() {
    random_device rd;
    mt = mt19937(rd());
  }
  int operator()(int x) { return this->operator()(0, x - 1); }
  int operator()(int x, int y) {
    uniform_int_distribution<int> dist(x, y);
    return dist(mt);
  }
} dc;
struct Node {
  ll val;
  Node *lch, *rch;
  int sz;
  Node(ll a) : val(a), lch(0), rch(0), sz(1) { init(); }

  /*int put;
  void init() { put = 0; }
  void push() {
  val += put;
  if (lch) lch->put += put;
  if (rch) rch->put += put;
  put = 0;
  }*/
  ll mi;
  void init() { mi = val; }
  void push() {}
  void update() {
    mi = val;
    if (lch)
      mi = min(mi, lch->mi);
    if (rch)
      mi = min(mi, rch->mi);
  }
};
struct RBST {

  RBST() : root(NULL) {}

  Node *root;
  inline int getsz(Node *t) { return t ? t->sz : 0; }
  int getsz() { return getsz(root); }
  inline void push(Node *t) {
    if (t == NULL)
      return;
    t->push();
  }
  inline Node *update(Node *t) {
    if (!t)
      return NULL;
    t->sz = getsz(t->lch) + getsz(t->rch) + 1;
    t->update();
    return t;
  }

  Node *merge(Node *a, Node *b) {
    push(a);
    push(b);
    if (!a)
      return b;
    if (!b)
      return a;

    if (dc(getsz(a) + getsz(b)) < getsz(a)) {
      a->rch = merge(a->rch, b);
      return update(a);
    } else {
      b->lch = merge(a, b->lch);
      return update(b);
    }
  }

  pair<Node *, Node *> split(Node *t, int k) { //[0,k) [k,N)
    push(t);
    if (!t)
      return make_pair(t, t);
    if (k <= getsz(t->lch)) {
      pair<Node *, Node *> s = split(t->lch, k);
      t->lch = s.second;
      return make_pair(s.first, update(t));
    } else {
      pair<Node *, Node *> s = split(t->rch, k - getsz(t->lch) - 1);
      t->rch = s.first;
      return make_pair(update(t), s.second);
    }
  }

  int lower_bound(int x) { return lower_bound(root, x); }
  int lower_bound(Node *t, int x) {
    push(t);
    if (!t)
      return 0;
    if (t->val >= x)
      return lower_bound(t->lch, x);
    return lower_bound(t->rch, x) + getsz(t->lch) + 1;
  }

  ll query1(int l, int r) {
    auto p = split(root, l);

    auto a = p.first;

    auto q = split(p.second, r - l + 1);

    auto b = q.first;
    auto c = q.second;

    ll res = -1;
    if (b)
      res = b->mi;

    root = merge(merge(a, b), c);

    return res;
  }

  void query0(int i, ll v) {
    auto p = split(root, i);
    auto a = p.first;
    auto q = split(p.second, 1);
    Node *b = q.first;
    auto c = q.second;

    b = new Node(v);

    root = merge(merge(a, b), c);
  }

  void dump() {
    dump(root);
    cout << endl;
  }
  void dump(Node *t) {
    if (t == NULL)
      return;
    dump(t->lch);
    cout << t->val << " ";
    dump(t->rch);
  }
  void push_back(Node *t) { root = merge(root, t); }
};
/*---------------------------------------------------------------------------------------------------
????????????????????????????????? ??§?????§
??????????????? ??§?????§ ???????´<_??? ?????? Welcome to My Coding Space!
???????????? ??? ?´_???`??????/??? ???i
?????????????????????????????? ???  |???|
????????? /?????? /??£??£??£??£/??????|
??? ???_(__??????/???    ???/ .| .|????????????
??? ????????????/????????????/??????u??????
---------------------------------------------------------------------------------------------------*/

int N, Q;
//---------------------------------------------------------------------------------------------------
void _main() {
  ll MAX = 2147483647LL;
  cin >> N >> Q;

  RBST tree;
  rep(i, 0, N) tree.push_back(new Node(MAX));

  rep(q, 0, Q) {
    int c, x, y;
    cin >> c >> x >> y;

    if (c == 0) {
      // printf("(%d) ", tree.getsz());
      tree.query0(x, y);
      // tree.dump();
    } else {
      ll ans = tree.query1(x, y);
      // printf("[%d] ", tree.getsz());
      printf("%lld\\n", ans);
    }
  }
}

Error: 0

Fixed submission:

#include <bits/stdc++.h>
#define rep(i, a, b) for (int i = a; i < b; i++)
using namespace std;
void _main();
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  _main();
}
//---------------------------------------------------------------------------------------------------
typedef long long ll;
struct dice {
  mt19937 mt;
  dice() {
    random_device rd;
    mt = mt19937(rd());
  }
  int operator()(int x) { return this->operator()(0, x - 1); }
  int operator()(int x, int y) {
    uniform_int_distribution<int> dist(x, y);
    return dist(mt);
  }
} dc;
struct Node {
  ll val;
  Node *lch, *rch;
  int sz;
  Node(ll a) : val(a), lch(0), rch(0), sz(1) { init(); }

  /*int put;
  void init() { put = 0; }
  void push() {
  val += put;
  if (lch) lch->put += put;
  if (rch) rch->put += put;
  put = 0;
  }*/
  ll mi;
  void init() { mi = val; }
  void push() {}
  void update() {
    if (lch)
      mi = min(mi, lch->mi);
    if (rch)
      mi = min(mi, rch->mi);
  }
};
struct RBST {

  RBST() : root(NULL) {}

  Node *root;
  inline int getsz(Node *t) { return t ? t->sz : 0; }
  inline void push(Node *t) {
    if (t == NULL)
      return;
    t->push();
  }
  inline Node *update(Node *t) {
    if (!t)
      return NULL;
    t->sz = getsz(t->lch) + getsz(t->rch) + 1;
    t->update();
    return t;
  }

  Node *merge(Node *a, Node *b) {
    push(a);
    push(b);
    if (!a)
      return b;
    if (!b)
      return a;

    if (dc(getsz(a) + getsz(b)) < getsz(a)) {
      a->rch = merge(a->rch, b);
      return update(a);
    } else {
      b->lch = merge(a, b->lch);
      return update(b);
    }
  }

  pair<Node *, Node *> split(Node *t, int k) { //[0,k) [k,N)
    push(t);
    if (!t)
      return make_pair(t, t);
    if (k <= getsz(t->lch)) {
      pair<Node *, Node *> s = split(t->lch, k);
      t->lch = s.second;
      return make_pair(s.first, update(t));
    } else {
      pair<Node *, Node *> s = split(t->rch, k - getsz(t->lch) - 1);
      t->rch = s.first;
      return make_pair(update(t), s.second);
    }
  }

  int lower_bound(int x) { return lower_bound(root, x); }
  int lower_bound(Node *t, int x) {
    push(t);
    if (!t)
      return 0;
    if (t->val >= x)
      return lower_bound(t->lch, x);
    return lower_bound(t->rch, x) + getsz(t->lch) + 1;
  }

  ll query1(int l, int r) {
    auto p = split(root, l);

    auto a = p.first;

    auto q = split(p.second, r - l + 1);

    auto b = q.first;
    auto c = q.second;

    return b->mi;
  }

  void query0(int i, ll v) {
    auto p = split(root, i);
    auto a = p.first;
    auto q = split(p.second, 1);
    Node *b = q.first;
    auto c = q.second;

    b = new Node(v);

    root = merge(merge(a, b), c);
  }

  void dump() {
    dump(root);
    cout << endl;
  }
  void dump(Node *t) {
    if (t == NULL)
      return;
    dump(t->lch);
    cout << t->val << " ";
    dump(t->rch);
  }
  void push_back(Node *t) { root = merge(root, t); }
};
/*---------------------------------------------------------------------------------------------------
????????????????????????????????? ??§?????§
??????????????? ??§?????§ ???????´<_??? ?????? Welcome to My Coding Space!
???????????? ??? ?´_???`??????/??? ???i
?????????????????????????????? ???  |???|
????????? /?????? /??£??£??£??£/??????|
??? ???_(__??????/???    ???/ .| .|????????????
??? ????????????/????????????/??????u??????
---------------------------------------------------------------------------------------------------*/

int N, Q;
//---------------------------------------------------------------------------------------------------
void _main() {
  ll MAX = 2147483647LL;
  cin >> N >> Q;

  RBST tree;
  rep(i, 0, N) tree.push_back(new Node(MAX));

  rep(q, 0, Q) {
    int c, x, y;
    cin >> c >> x >> y;

    if (c == 0)
      tree.query0(x, y);
    else {
      ll ans = tree.query1(x, y);
      printf("%lld\\n", ans);
    }
  }
}