83
83
Query both the children and add their results and return that
84
84
"""
85
85
86
+
86
87
class SegmentTree :
87
88
def __init__ (self , arr , merge_func , default ):
88
89
"""
@@ -97,7 +98,7 @@ def __init__(self, arr, merge_func, default):
97
98
self .n = len (arr )
98
99
99
100
# while self.n is not a power of two
100
- while (self .n & (self .n - 1 )) != 0 :
101
+ while (self .n & (self .n - 1 )) != 0 :
101
102
self .n += 1
102
103
self .arr .append (default )
103
104
@@ -109,8 +110,9 @@ def __init__(self, arr, merge_func, default):
109
110
self .segment_tree [self .n + i ] = arr [i ]
110
111
111
112
for i in range (self .n - 1 , 0 , - 1 ):
112
- self .segment_tree [i ] = self .merge_func (self .segment_tree [2 * i ],
113
- self .segment_tree [2 * i + 1 ])
113
+ self .segment_tree [i ] = self .merge_func (
114
+ self .segment_tree [2 * i ], self .segment_tree [2 * i + 1 ]
115
+ )
114
116
115
117
def update (self , index , value ):
116
118
"""
@@ -120,8 +122,9 @@ def update(self, index, value):
120
122
121
123
while index >= 1 :
122
124
index //= 2 # Go to the parent of index
123
- self .segment_tree [index ] = self .merge_func (self .segment_tree [2 * index ],
124
- self .segment_tree [2 * index + 1 ])
125
+ self .segment_tree [index ] = self .merge_func (
126
+ self .segment_tree [2 * index ], self .segment_tree [2 * index + 1 ]
127
+ )
125
128
126
129
def query (self , left , right , node_index = 1 , node_left = 0 , node_right = None ):
127
130
"""
@@ -148,5 +151,5 @@ def query(self, left, right, node_index=1, node_left=0, node_right=None):
148
151
# of the query values of both the children nodes
149
152
return self .merge_func (
150
153
self .query (left , right , node_index * 2 , node_left , mid ),
151
- self .query (left , right , node_index * 2 + 1 , mid + 1 , node_right )
154
+ self .query (left , right , node_index * 2 + 1 , mid + 1 , node_right ),
152
155
)
0 commit comments