This library has been merged with extratools. Future development continues there.
This data structure solves the range minimum query problem of finding the minimal value in a sub-array of an array of comparable objects. Different from the original problem, this data structure also supports updating the values.
This package is available on PyPI. Just use pip install -U RangeMinQuery to install it. Then you can import it using from RangeMinQuery import SegmentTree.
Use SegmentTree() to initialize the tree with a set of keys, in comparable and hashable type.
-
func=minspecifies how the best value is computed for any range of keys. -
default=Nonespecifies the default value for each key. -
maxChildNum=2specifies the maximum number of children for each node.
tree = SegmentTree(
{1, 2, 3, 4, 5},
func=min, default=0, maxChildNum=2
)The space complexity should be
You need to use update() to initialize the values, or update the values if necessary, by specifying a dictionary of key/value pairs. Currently, adding new keys is not supported yet.
tree.update({1: 3, 4: 6})Given m values updated, the time complexity should be
Use query() to to find the best value of a range of keys. The range is denoted by a tuple (a, b), representing each key x such that a <= x < b. The range here is closed on the left side and open on the right side, consistent with Python tradition.
tree.query((1, 3))The time complexity should be