-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRangeSumQuery-mutable.js
More file actions
98 lines (87 loc) · 2.11 KB
/
RangeSumQuery-mutable.js
File metadata and controls
98 lines (87 loc) · 2.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/**
* @param {number[]} nums
*/
var NumArray = function(nums) {
this.nums=nums.slice()
this.tree=new Array(nums.length +1).fill(0);
for(let i=0;i<nums.length;i++){
this._add(i+1,nums[i]);
}
};
NumArray.prototype._add=function(index,val){
while(index<this.tree.length){
this.tree[index]+=val;
index+=index&-index
}
}
NumArray.prototype._prefix=function(index){
let sum=0;
while(index>0){
sum+=this.tree[index]
index-= index&-index
}
return sum;
}
/**
* @param {number} index
* @param {number} val
* @return {void}
*/
NumArray.prototype.update = function(index, val) {
let diff=val-this.nums[index];
this.nums[index]=val
this._add(index+1,diff)
};
/**
* @param {number} left
* @param {number} right
* @return {number}
*/
NumArray.prototype.sumRange = function(left, right) {
return this._prefix(right+1)-this._prefix(left)
};
/**
* Your NumArray object will be instantiated and called as such:
* var obj = new NumArray(nums)
* obj.update(index,val)
* var param_2 = obj.sumRange(left,right)
*/
// /**
// * @param {number[]} nums
// */
// var NumArray = function(nums) {
// this.nums=nums
// prefixSum=[0]
// for(let i=0;i<=this.nums.length;i++){
// prefixSum.push(this.nums[i]+prefixSum[i])
// }
// this.prefixSum=prefixSum
// };
// /**
// * @param {number} index
// * @param {number} val
// * @return {void}
// */
// NumArray.prototype.update = function(index, val) {
// this.nums[index]=val;
// let prefixSum=[0]
// for(let i=0;i<=this.nums.length;i++){
// prefixSum.push(this.nums[i]+prefixSum[i])
// }
// this.prefixSum=prefixSum;
// };
// /**
// * @param {number} left
// * @param {number} right
// * @return {number}
// */
// NumArray.prototype.sumRange = function(left, right) {
// // if(left===0)return this.prefixSum[right];
// return this.prefixSum[right+1]-this.prefixSum[left]
// };
// /**
// * Your NumArray object will be instantiated and called as such:
// * var obj = new NumArray(nums)
// * obj.update(index,val)
// * var param_2 = obj.sumRange(left,right)
// */