Given an integer array `nums`, handle multiple queries of the following types: 1. **Update** the value of an element in `nums`. 2. Calculate the **sum** of the elements of `nums` between indices `left` and `right` **inclusive** where `left <= right`. Implement the `NumArray` class: - `NumArray(int[] nums)` Initializes the object with the integer array `nums`. - `void update(int index, int val)` **Updates** the value of `nums[index]` to be `val`. - `int sumRange(int left, int right)` Returns the **sum** of the elements of `nums` between indices `left` and `right` **inclusive**.
Example 1
Input: operations = ["NumArray","sumRange","update","sumRange"], args = [[[1,3,5]],[0,2],[1,2],[0,2]]
Output: [null,9,null,8]
Explanation: sumRange(0,2)=9; after update(1,2) the array is [1,2,5]; sumRange(0,2)=8.
Example 2
Input: operations = ["NumArray","update","sumRange"], args = [[[0,0,0]],[1,5],[0,2]]
Output: [null,null,5]
Explanation: After update(1,5) the array is [0,5,0], so sumRange(0,2) = 5.
Example 3
Input: operations = ["NumArray","sumRange","update","update","sumRange"], args = [[[1,2,3,4,5]],[0,4],[0,10],[4,0],[0,4]]
Output: [null,15,null,null,19]
Explanation: The first sum is 1 + 2 + 3 + 4 + 5 = 15. Setting index 0 to 10 adds 9 and setting index 4 to 0 removes 5, so the new sum is 15 + 9 - 5 = 19.
Prefix sums make queries O(1) but updates O(n). A Fenwick tree balances both to O(log n): it stores partial sums over power-of-two ranges so a point update and a prefix query each touch only O(log n) nodes.
Run checks all cases above. Submit evaluates all test cases.