Submission details
Task:Dynamic Range Minimum Queries
Sender:banghalq
Submission time:2025-09-18 17:06:50 +0300
Language:Python3 (PyPy3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2--details

Code

n,q = [int(x) for x in input().split()]
array = [int(x) for x in input().split()]

class Node:
    def __init__(self, l, r):
        self.l = l
        self.r = r
        self.val = 0
        self.next_left = 0
        self.next_right = 0

    def get_left(self):
        return (self.l+self.r)//2
    
    def get_right(self):
        return self.get_left()+1

class SegmentTree:
    def __init__(self, array):
        self.arr = array
        self.root = Node(0, len(array) - 1)
        self.build_tree(self.root)


    def build_tree(self, node):
        if (node.l == node.r):
            node.val = self.arr[node.l]
            return
        
        node.next_left = Node(node.l, node.get_left())
        self.build_tree(node.next_left)
 
        node.next_right = Node(node.get_right(), node.r)
        self.build_tree(node.next_right)
 
        node.val = min(node.next_left.val, node.next_right.val)

    def find_min(self, a, b, node):
        if node.l == a and node.r == b:
            return node.val
        
        if a <= node.get_left():
            res1 = self.find_min(a, min(node.get_left(), b), node.next_left)
        else:
            res1 = float('inf')
        if b >= node.get_right():
            res2 = self.find_min(max(node.get_right(), a), b, node.next_right)
        else:
            res2 = float('inf')
        return min(res1, res2)
    
    def update(self, k, u, node):
        if node.l == node.r:
            node.val = u
            return
        
        if k <= node.get_left():
            self.update(k, u, node.next_left)
        else:
            self.update(k, u, node.next_right)

        node.val = min(node.next_left.val, node.next_right.val)

st = SegmentTree(array)
solution = []
for _ in range(q):
    indic, k, u = [int(x) for x in input().split()]
    if indic == 1:
        st.update(k-1, u, st.root)
    else:
        solution.append(st.find_min(k-1, u-1, st.root))

for elt in solution:
    print(elt)
    

Test details

Test 1

Verdict: ACCEPTED

input
8 80
7 6 4 6 2 9 4 8
2 1 1
2 1 2
2 1 3
...

correct output
7
6
4
4
2
...

user output
7
6
4
4
2
...
Truncated

Test 2

Verdict:

input
200000 200000
398739055 65343131 699208332 3...

correct output
28609
129890
20378
20378
311522
...

user output
(empty)