public void updateHelper(SegTree node, int i, int val) { if (node == null) return; if (node.start == node.end && node.start == i) { node.sum = val; return; } int mid = (node.start + node.end) / 2; if (i <= mid) { updateHelper(node.left, i, val); } else { updateHelper(node.right, i, val); } node.sum = node.left.sum + node.right.sum; }
public SegTree buildTree(int nums[], int i, int j) { if (j < i) return null; SegTree node = new SegTree(i, j); if (i == j) { node.sum = nums[i]; return node; } int mid = (i + j) / 2; node.left = buildTree(nums, i, mid); node.right = buildTree(nums, mid + 1, j); if (node.left != null) node.sum += node.left.sum; if (node.right != null) node.sum += node.right.sum; return node; }