RangeSet[T] = ref object st*: AvlSortedMultiSet[(int, int, T)] default*: T
proc get_segment[T](self: RangeSet[T]; x: int): (int, int, int)
proc initRangeSet[T](default: T): RangeSet[T]
proc update[T](self: RangeSet[T]; l, r: int; value: T)