Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void upd(int v, int l, int r, int idx, int val) {
- if (l == r) {
- A[idx] = val;
- tree[v] = val;
- return;
- }
- int mid = (l + r) / 2;
- if (l <= idx && idx <= mid)
- upd(2 * v, l, mid, idx, val);
- else upd(2 * v + 1 , mid + 1, r, idx, val);
- tree[v] = min(tree[2 * v], tree[2 * v + 1]);
- }
- void build(int v, int l, int r) {
- if (l == r) {
- tree[v] = A[l];
- return;
- }
- int mid = (l + r) / 2;
- build(2 * v, l, mid);
- build(2 * v + 1, mid + 1, r);
- tree[v] = min(tree[2 * v], tree[2 * v + 1]);
- }
- int query(int v, int l, int r, int L, int R) {
- if (R < l || r < L)
- return INF;
- if (L <= l && r <= R)
- return tree[v];
- int mid = (l + r) / 2;
- int p1 = query(2 * v, l, mid, L, R);
- int p2 = query(2 * v + 1, mid + 1, r, L, R);
- return min(p1, p2);
- }
Advertisement
Add Comment
Please, Sign In to add comment