@@ -16,8 +16,8 @@ def __init__(self, nums: list[int], mode: str='max') -> None:
1616 """
1717 self .size = len (nums )
1818 self .mode = mode
19- if mode not in {' max' , ' sum' }:
20- self .mode = ' max' # Default to max if invalid mode is given
19+ if mode not in {" max" , " sum" }:
20+ self .mode = " max" # Default to max if invalid mode is given
2121
2222 # Build the tree from the input list
2323 self .root = self .build (0 , self .size - 1 , nums )
@@ -38,14 +38,14 @@ def build(self, start: int, end: int, nums: list[int]) -> Node:
3838 n = Node (start , end )
3939 n .value = nums [start ]
4040 return n
41-
41+
4242 mid = (start + end ) // 2
4343 root = Node (start , end )
4444 root .left = self .build (start , mid , nums )
4545 root .right = self .build (mid + 1 , end , nums )
4646
4747 # Set the value according to the mode
48- if self .mode == ' max' :
48+ if self .mode == " max" :
4949 root .value = max (root .left .value , root .right .value )
5050 else :
5151 root .value = root .left .value + root .right .value
@@ -57,24 +57,24 @@ def max_in_range(self, start_index: int, end_index: int) -> int:
5757 Queries the maximum value in a given range.
5858 Only works in 'max' mode.
5959 """
60- if self .mode == ' sum' :
61- raise Exception (' Current Segment Tree doesn\ ' t support finding max' )
62-
60+ if self .mode == " sum" :
61+ raise Exception (" Current Segment Tree doesn't support finding max" )
62+
6363 if start_index > end_index or start_index < 0 or end_index >= self .size :
64- raise Exception (' Invalid index' )
65-
64+ raise Exception (" Invalid index" )
65+
6666 return self .query (self .root , start_index , end_index , 0 , self .size - 1 )
6767
6868 def sum_in_range (self , start_index : int , end_index : int ) -> int :
6969 """
7070 Queries the sum of values in a given range.
7171 Only works in 'sum' mode.
7272 """
73- if self .mode == ' max' :
74- raise Exception (' Current Segment Tree doesn\ ' t support summing' )
75-
73+ if self .mode == " max" :
74+ raise Exception (" Current Segment Tree doesn't support summing" )
75+
7676 if start_index > end_index or start_index < 0 or end_index >= self .size :
77- raise Exception (' Invalid index' )
77+ raise Exception (" Invalid index" )
7878
7979 return self .query (self .root , start_index , end_index , 0 , self .size - 1 )
8080
@@ -91,7 +91,7 @@ def query(self, node: Node, start_index: int, end_index: int, start: int, end: i
9191 # Complete overlap
9292 if start_index <= start and end <= end_index :
9393 return node .value
94-
94+
9595 mid = (start + end ) // 2
9696
9797 if end_index <= mid :
@@ -102,10 +102,15 @@ def query(self, node: Node, start_index: int, end_index: int, start: int, end: i
102102 return self .query (node .right , start_index , end_index , mid + 1 , end )
103103 else :
104104 # Range spans both children
105- if self .mode == 'max' :
106- return max (self .query (node .left , start_index , end_index , start , mid ), self .query (node .right , start_index , end_index , mid + 1 , end ))
105+ if self .mode == "max" :
106+ return max (
107+ self .query (node .left , start_index , end_index , start , mid ),
108+ self .query (node .right , start_index , end_index , mid + 1 , end ),
109+ )
107110 else :
108- return (self .query (node .left , start_index , end_index , start , mid ) + self .query (node .right , start_index , end_index , mid + 1 , end ))
111+ return self .query (
112+ node .left , start_index , end_index , start , mid
113+ ) + self .query (node .right , start_index , end_index , mid + 1 , end )
109114
110115 def update (self , index : int , new_value : int ) -> int :
111116 """
@@ -114,8 +119,8 @@ def update(self, index: int, new_value: int) -> int:
114119 :param new_value: New value to set.
115120 """
116121 if index < 0 or index >= self .size :
117- raise Exception (' Invalid index' )
118-
122+ raise Exception (" Invalid index" )
123+
119124 self .modify (self .root , index , new_value , 0 , self .size - 1 )
120125
121126 def modify (self , node : Node , index : int , new_value : int , start : int , end : int ) -> int :
@@ -137,9 +142,9 @@ def modify(self, node: Node, index: int, new_value: int, start: int, end: int) -
137142 self .modify (node .left , index , new_value , start , mid )
138143 else :
139144 self .modify (node .right , index , new_value , mid + 1 , end )
140-
145+
141146 # Recompute current node's value after update
142- if self .mode == ' max' :
147+ if self .mode == " max" :
143148 node .value = max (node .left .value , node .right .value )
144149 else :
145150 node .value = node .left .value + node .right .value
0 commit comments