arr = [0]*100005
seg = [0] * (4 * 100005)
def build(idx, low, high):
if low == high:
seg[idx] = arr[low]
return
mid = (low + high) // 2;
build(2*idx+1, low, mid)
build(2*idx+2, mid + 1, high)
seg[idx] = max(seg[2*idx+1], seg[2*idx+2])
def query(idx, low, high, l, r):
if low >= l and high <= r:
return seg[idx]
if high < l or low > r:
return float('-inf')
mid = (low + high) // 2
left = query(2*idx+1, low, mid, l, r)
right = query(2*idx+2, mid + 1, high, l, r)
return max(left, right)
if __name__ == "__main__":
ar = [1, 3, 4, 6, 5, 9, 8]
for i in range(len(ar)):
arr[i] = ar[i]
n = len(ar)
build(0, 0, n-1)
print(query(0, 0, n-1, 1, 3))