def build_tree(self, s, e):
        if s >= e:
            return None

        if s+1 == e:
            return Node(s, e, self.A[s])

        left = self.build_tree(s, (s+e)/2)
        right = self.build_tree((s+e)/2, e)
        val = DEFAULT
        if left: val = f(val, left.m)
        if right: val = f(val, right.m)
        root = Node(s, e, val)
        root.left = left
        root.right = right

        return root
segment: [s, e)
dataset/ETHPy150Open algorhythms/LintCode/Interval Minimum Number.py/SegmentTree.build_tree