Embercode
✕
Segment TreesQuick quiz

Dynamic trees and 2D sums

7 questions. Covers 2D prefix sums and 2D Fenwick trees in Python.

Questions 1 to 5 of 7

  1. 1. Predict the output of this program. ``python LO = 1 HI = 1_000_000_000 class DynamicSegmentTree: def __init__(self): self.left = [0] # index 0 means no node self.right = [0] self.sum = [0] self.root = 0 def nodes_used(self): return len(self.sum) - 1 def _new_node(self): self.left.append(0) self.right.append(0) self.sum.append(0) return len(self.sum) - 1 def add(self, pos, delta): self.root = self._add_at(self.root, LO, HI, pos, delta) def _add_at(self, node, lo, hi, pos, delta): if node == 0: node = self._new_node() self.sum[node] += delta if lo == hi: return node mid = lo + (hi - lo) // 2 if pos <= mid: self.left[node] = self._add_at(self.left[node], lo, mid, pos, delta) else: self.right[node] = self._add_at(self.right[node], mid + 1, hi, pos, delta) return node def query(self, l, r): return self._query_at(self.root, LO, HI, l, r) def _query_at(self, node, lo, hi, l, r): if node == 0 or r < lo or hi < l: return 0 if l <= lo and hi <= r: return self.sum[node] mid = lo + (hi - lo) // 2 return (self._query_at(self.left[node], lo, mid, l, r) + self._query_at(self.right[node], mid + 1, hi, l, r)) tree = DynamicSegmentTree() tree.add(5, 1) print("after one insert:", tree.nodes_used()) tree.add(999_999_999, 1) tree.add(6, 2) print("nodes used:", tree.nodes_used()) print("query(1, 100):", tree.query(1, 100)) print("query(6, 1000000000):", tree.query(6, 1_000_000_000)) print("query(7, 999999998):", tree.query(7, 999_999_998)) ``
  2. 2. Predict the output of this program. ``python def build_prefix(g, n, m): p = [[0] * (m + 1) for _ in range(n + 1)] for i in range(1, n + 1): for j in range(1, m + 1): p[i][j] = g[i][j] + p[i - 1][j] + p[i][j - 1] - p[i - 1][j - 1] return p def rect_from_prefix(p, r1, c1, r2, c2): return p[r2][c2] - p[r1 - 1][c2] - p[r2][c1 - 1] + p[r1 - 1][c1 - 1] grid = [ [0, 0, 0, 0], [0, 4, 1, 3], [0, 2, 5, 6], ] p = build_prefix(grid, 2, 3) print(p[2][3]) print(p[1][2]) print(rect_from_prefix(p, 2, 2, 2, 3)) print(rect_from_prefix(p, 1, 2, 2, 2)) ``
  3. 3. A dynamic segment tree over the range 1 to 1000000000 creates at most how many nodes for one insert?
  4. 4. Why does query return 0 when it reaches a child whose index is 0?
  5. 5. Which statements about the 2D prefix table and the 2D Fenwick tree are true? Pick all that apply.

    Pick every answer that is true.

5 question(s) left on this page.