Guest User

Untitled

a guest
Oct 23rd, 2018
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.16 KB | None | 0 0
  1. def suf_max(xs):
  2.     for i in range(len(xs)-2, -1, -1):
  3.         xs[i] = max(xs[i+1], xs[i])
  4.  
  5.  
  6. class MaxSegment:
  7.     def __init__(self, xs):
  8.         self.xs = xs[:]
  9.         self._local_max = 0
  10.         self._reset()
  11.  
  12.     def _reset(self):
  13.         suf_max(self.xs)
  14.         self._last = 0
  15.         self._local_max = self.xs[0]
  16.  
  17.     def push(self, x):
  18.         if self._last == len(self.xs) - 1:
  19.             self.xs[-1] = x
  20.             self.xs.reverse()
  21.             self._reset()
  22.         else:
  23.             self.xs[self._last] = x
  24.             self._last += 1
  25.             self._local_max = max(x, self.xs[self._last])
  26.  
  27.     def max(self):
  28.         return self._local_max
  29.  
  30.  
  31. def max_k_segments(xs, k):
  32.     result = []
  33.     ms = MaxSegment(xs[:k])
  34.     for x in xs[k:]:
  35.         result.append(ms.max())
  36.         ms.push(x)
  37.     result.append(ms.max())
  38.     return result
  39.  
  40.  
  41. def main():
  42.     _test()
  43.     print("ok")
  44.  
  45.  
  46. def _test():
  47.     assert max_k_segments([10, 5, 2, 7, 8, 7], 3) == [10, 7, 8, 8]
  48.     assert max_k_segments([10, 5, 2, 7, 8, 7], 6) == [10]
  49.     assert max_k_segments([1, 2, 3, 4], 1) == [1, 2, 3, 4]
  50.  
  51.  
  52. if __name__ == '__main__':
  53.     main()
Advertisement
Add Comment
Please, Sign In to add comment