2
2
import math
3
3
4
4
class SegmentTree :
5
-
5
+
6
6
def __init__ (self , N ):
7
7
self .N = N
8
8
self .st = [0 for i in range (0 ,4 * N )] # approximate the overall size of segment tree with array N
9
9
self .lazy = [0 for i in range (0 ,4 * N )] # create array to store lazy update
10
10
self .flag = [0 for i in range (0 ,4 * N )] # flag for lazy update
11
-
11
+
12
12
def left (self , idx ):
13
13
return idx * 2
14
14
@@ -34,7 +34,7 @@ def update(self, idx, l, r, a, b, val): # update(1, 1, N, a, b, v) for update va
34
34
self .lazy [self .right (idx )] = self .lazy [idx ]
35
35
self .flag [self .left (idx )] = True
36
36
self .flag [self .right (idx )] = True
37
-
37
+
38
38
if r < a or l > b :
39
39
return True
40
40
if l >= a and r <= b :
@@ -74,18 +74,18 @@ def showData(self):
74
74
showList = []
75
75
for i in range (1 ,N + 1 ):
76
76
showList += [self .query (1 , 1 , self .N , i , i )]
77
- print (showList )
78
-
77
+ print (showList )
78
+
79
79
80
80
if __name__ == '__main__' :
81
81
A = [1 ,2 ,- 4 ,7 ,3 ,- 5 ,6 ,11 ,- 20 ,9 ,14 ,15 ,5 ,2 ,- 8 ]
82
82
N = 15
83
83
segt = SegmentTree (N )
84
84
segt .build (1 ,1 ,N ,A )
85
- print (segt .query (1 ,1 ,N ,4 ,6 ))
86
- print (segt .query (1 ,1 ,N ,7 ,11 ))
87
- print (segt .query (1 ,1 ,N ,7 ,12 ))
85
+ print (segt .query (1 ,1 ,N ,4 ,6 ))
86
+ print (segt .query (1 ,1 ,N ,7 ,11 ))
87
+ print (segt .query (1 ,1 ,N ,7 ,12 ))
88
88
segt .update (1 ,1 ,N ,1 ,3 ,111 )
89
- print (segt .query (1 ,1 ,N ,1 ,15 ))
89
+ print (segt .query (1 ,1 ,N ,1 ,15 ))
90
90
segt .update (1 ,1 ,N ,7 ,8 ,235 )
91
91
segt .showData ()
0 commit comments