Advertisement
Guest User

Untitled

a guest
Feb 17th, 2020
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.70 KB | None | 0 0
  1. struct node {
  2.     int l, r, mn;
  3.     node *left = 0, *right = 0;
  4.  
  5.     node(int l, int r): l(l), r(r), mn(INT_MAX) {
  6.         if (l != r) left = new node(l, (l + r) / 2), right = new node((l + r) / 2 + 1, r);
  7.     };
  8.  
  9.     void merge() {
  10.         mn = min(left->mn, right->mn);
  11.     }
  12.  
  13.     void mod(int pos, int v) {
  14.         if (l > pos || r < pos) return;
  15.         if (l == pos && r == pos) {
  16.             mn = v;
  17.             return;
  18.         }
  19.         left->mod(pos, v);
  20.         right->mod(pos, v);
  21.         merge();
  22.     }
  23.  
  24.     int get(int L, int R) {
  25.         if (l > R || r < L) return INT_MAX;
  26.         if (L <= l && R >= r) return mn;
  27.         return min(left->get(L, R), right->get(L, R));
  28.     }
  29. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement