Recursive implementation of range query.
(self, node: int, start: int, end: int, left: int, right: int)
| 92 | return self._query_range(1, 0, self.tree_size - 1, left, right) |
| 93 | |
| 94 | def _query_range(self, node: int, start: int, end: int, left: int, right: int) -> T: |
| 95 | """Recursive implementation of range query.""" |
| 96 | if right < start or left > end: |
| 97 | return self.default_value |
| 98 | |
| 99 | if left <= start and end <= right: |
| 100 | return self.tree[node] |
| 101 | |
| 102 | mid = (start + end) // 2 |
| 103 | left_result = self._query_range(2 * node, start, mid, left, right) |
| 104 | right_result = self._query_range(2 * node + 1, mid + 1, end, left, right) |
| 105 | return self.operation(left_result, right_result) |
| 106 | |
| 107 | def find_first(self, predicate: Callable[[T], bool], start_index: int = 0) -> int: |
| 108 | """Find first index >= start_index where predicate is True.""" |