Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct node {
- int l, r, mn;
- node *left = 0, *right = 0;
- node(int l, int r): l(l), r(r), mn(INT_MAX) {
- if (l != r) left = new node(l, (l + r) / 2), right = new node((l + r) / 2 + 1, r);
- };
- void merge() {
- mn = min(left->mn, right->mn);
- }
- void mod(int pos, int v) {
- if (l > pos || r < pos) return;
- if (l == pos && r == pos) {
- mn = v;
- return;
- }
- left->mod(pos, v);
- right->mod(pos, v);
- merge();
- }
- int get(int L, int R) {
- if (l > R || r < L) return INT_MAX;
- if (L <= l && R >= r) return mn;
- return min(left->get(L, R), right->get(L, R));
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement