n , m = map(int , input().split()) nums = list(map(int , input().split()))
ST = [float("inf") for _ in range(4*n)]
def build(node , l , r):
global nums , ST
if l == r:
ST[node] = [nums[l],1]
else:
mid = l + (r-l)//2
build(2*node , l , mid)
build(2*node +1 , mid+1 , r)
if ST[2*node][0] < ST[2*node + 1][0]:
ST[node] = ST[2*node]
elif ST[2*node][0] > ST[2*node + 1][0]:
ST[node] = ST[2*node + 1]
else:
ST[node] = [ST[2*node][0] , ST[2*node][1] + ST[2*node + 1][1]]
build(1 , 0 , n-1)
def update(node , l , r , ind , val):
global nums , ST
if l == r:
nums[ind] = val
ST[node] = [val,1]
else:
mid = l + (r-l)//2
if l <= ind and ind <= mid:
update(2*node , l , mid , ind , val)
else:
update(2*node+1 , mid+1 , r ,ind , val)
if ST[2*node][0] < ST[2*node + 1][0]:
ST[node] = ST[2*node]
elif ST[2*node][0] > ST[2*node + 1][0]:
ST[node] = ST[2*node + 1]
else:
ST[node] = [ST[2*node][0] , ST[2*node][1] + ST[2*node + 1][1]]
def query(node , l , r , ql ,qr):
global nums , ST
if qr < l or ql > r:
return [float("inf"), 0]
if l <= ql and r <= qr:
return ST[node]
mid = l+(r-l)//2
left = query(2*node , l , mid , ql ,qr)
right = query(2*node+1 , mid+1 , r , ql ,qr)
if left[0] < right[0]:
return left
elif right[0] < left[0]:
return right
else:
return [left[0] , left[1] + right[1]]
for _ in range(m):
ch , x , y = map(int , input().split())
if ch == 1:
update(1 , 0 , n-1 , x , y)
if ch == 2:
res = query(1 , 0 , n-1 , x , y-1)
print(res[0] , res[1])
I don't know whats wrong with my code :(




