classNumArray{int[] _nums;int[] sum;publicintlowbit(int x){return x &(-x);}publicNumArray(int[] nums){
_nums =newint[nums.length +1];
sum =newint[nums.length +1];for(int i =0; i < nums.length; i ++){update(i, nums[i]);}}publicvoidupdate(int index,int val){
index ++;// 树状数组是从1开始的下标int _val = val - _nums[index];
_nums[index]= val;while(index < _nums.length){
sum[index]+= _val;
index +=lowbit(index);}}publicintquery(int index){int ans =0;while(index >0){
ans += sum[index];
index -=lowbit(index);}return ans;}publicintsumRange(int left,int right){returnquery(right +1)-query(left);}}/**
* Your NumArray object will be instantiated and called as such:
* NumArray obj = new NumArray(nums);
* obj.update(index,val);
* int param_2 = obj.sumRange(left,right);
*/
LeetCode刷题记178307. 区域和检索 - 数组可修改题目class NumArray { int[] _nums; int[] sum; public int lowbit(int x) { return x & (-x); } public NumArray(int[] nums) { _nums = new int[nums.length + 1]; sum = new int[num