Skip to content

Commit 7338ebe

Browse files
authored
Create 307. Range Sum Query - Mutable.cpp
1 parent 22a4cc4 commit 7338ebe

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
int diff;
2+
vector<int> vect;
3+
int buildtree(int i,int st,int en,vector<int> nums){
4+
if(st==en) return vect[i] = nums[st];
5+
else if(st>en) return 0;
6+
else{
7+
int mid = (st+en)/2;
8+
vect[i] = buildtree(2*i+1,st,mid,nums) + buildtree(2*i+2,mid+1,en,nums);
9+
return vect[i];
10+
}
11+
}
12+
int get_sum(int i,int st,int en,int left,int right){
13+
if(st>en) return 0;
14+
else if(st>right || en<left) return 0;
15+
else{
16+
if(st>=left && en<=right) return vect[i];
17+
else{
18+
int mid = (st+en)/2;
19+
return get_sum(2*i+1,st,mid,left,right) + get_sum(2*i+2,mid+1,en,left,right);
20+
}
21+
}
22+
}
23+
void get_updated(int i,int st,int en,int index,int val){
24+
if(st>en) return;
25+
else if(st==en && st==index){
26+
diff = val-vect[i];
27+
vect[i] = val;
28+
return;
29+
}
30+
else{
31+
if(st>index || en<index) return;
32+
else{
33+
int mid = (st+en)/2;
34+
get_updated(2*i+1,st,mid,index,val);
35+
get_updated(2*i+2,mid+1,en,index,val);
36+
vect[i] = vect[i]+diff;
37+
}
38+
}
39+
}
40+
class NumArray {
41+
public:
42+
int cap;
43+
NumArray(vector<int>& nums) {
44+
int m = nums.size();
45+
vect.clear();
46+
for(int i=0;i<=4*m;i++) vect.push_back(0);
47+
int st=0,en=m-1;
48+
this->cap=en;diff=0;
49+
buildtree(0,st,en,nums);
50+
}
51+
void update(int index, int val) {
52+
int st=0,en=this->cap;
53+
get_updated(0,st,en,index,val);
54+
}
55+
56+
int sumRange(int left, int right) {
57+
int st=0,en=this->cap;
58+
return get_sum(0,st,en,left,right);
59+
}
60+
};
61+
62+
/**
63+
* Your NumArray object will be instantiated and called as such:
64+
* NumArray* obj = new NumArray(nums);
65+
* obj->update(index,val);
66+
* int param_2 = obj->sumRange(left,right);
67+
*/

0 commit comments

Comments
 (0)