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