class NumArray {
public:
int *tree;
int n;
NumArray(vector<int>& nums) {
n = nums.size();
tree = new int [2*n];
int i, j;
for(i = n; i < 2 * n; i++, j++)
tree[i] = nums[j];
for(j = n - 1; j > 0; j--)
tree[j] = tree[2 * j] + tree[2 * j + 1];
}
void update(int index, int val) {
int pos = index + n;
tree[pos] = val;
int left , right;
while(pos)
{
left = pos;
right = pos;
if(pos & 1)
left = pos - 1;
else
right = pos + 1;
pos >>= 1;
tree[pos] = tree[left] + tree[right];
}
}
int sumRange(int i, int j) {
int sum = 0;
i += n;
j += n;
while(i <= j)
{
if(i & 1){
sum += tree[i];
i++;
}
if(!(j&1)){
sum += tree[j];
j--;
}
i>>=1;
j>>=1;
}
return sum;
}
};
307. 区域和检索 - 数组可修改 leetcode 模拟
于 2022-04-04 19:44:06 首次发布