Guest User

Untitled

a guest
Oct 16th, 2019
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.10 KB | None | 0 0
  1. class SegmentTree:
  2.     def __init__(self, values):
  3.         self.data = [0 for _ in values] + values
  4.         self.n = len(values)
  5.        
  6.         for idx in reversed(range(1, self.n)):
  7.             self.data[idx] = (self.data[2*idx]+self.data[2*idx+1])
  8.         print(self.data)
  9.  
  10.     def update(self, idx, value):
  11.         idx += self.n
  12.         self.data[idx] = value
  13.  
  14.         while idx > 1:
  15.             idx //= 2
  16.             self.data[idx] = min(self.data[2*idx], self.data[2*idx+1])
  17.  
  18.     def minimum(self, left, right):
  19.         left += self.n
  20.         right += self.n
  21.         minimum = self.data[left]
  22.  
  23.         while left < right:
  24.             if left % 2:
  25.                 minimum = minimum+self.data[left]
  26.                 left += 1
  27.             if right % 2:
  28.                 right -= 1
  29.                 minimum = minimum + self.data[right]
  30.             left //= 2
  31.             right //= 2
  32.  
  33.         return minimum
  34.  
  35.  
  36. if __name__ == '__main__':
  37.     st = SegmentTree([1, 5, 3, 7, 5])
  38.     print(st.minimum(0, 5))
  39.     print(st.minimum(0, 4))
  40.     print(st.minimum(1, 2))
  41.  
  42. print(st.minimum(1, 2))
Add Comment
Please, Sign In to add comment