-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathtreapTest.py
44 lines (35 loc) · 1.22 KB
/
treapTest.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#!/usr/bin/env python
class nlowest:
def __init__(self, n, dups=False):
self.n = n
if dups:
import duptreap
self.treap = duptreap.duptreap()
else:
import treap
self.treap = treap.treap()
self.__iter__ = self.treap.iterator
self.have_evicted = False
def add(self, value):
if self.have_evicted and value < self.evicted or not self.have_evicted:
self.treap[value] = 0
if len(self.treap) > self.n:
(self.evicted, zero) = self.treap.remove_max()
self.have_evicted = True
class nhighest:
def __init__(self, n, dups=False):
self.n = n
if dups:
import duptreap
self.treap = duptreap.duptreap()
else:
import treap
self.treap = treap.treap()
self.__iter__ = self.treap.reverse_iterator
self.have_evicted = False
def add(self, value):
if self.have_evicted and value > self.evicted or not self.have_evicted:
self.treap[value] = 0
if len(self.treap) > self.n:
(self.evicted, zero) = self.treap.remove_min()
self.have_evicted = True