Submission details
Task:Dynamic Range Minimum Queries
Sender:aalto26dh_047
Submission time:2026-09-23 15:19:36 +0300
Language:Python3 (PyPy3)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.34 sdetails

Code

import sys
input = sys.stdin.readline

def solve():
    line = input().split()
    if not line:
        return
    n, q = int(line[0]), int(line[1])
    
    data = list(map(int, input().split()))
    
    p = 1
    while p < n:
        p *= 2
        
    tree = [float('inf')] * (2 * p)
    
    for i in range(n):
        tree[p + i] = data[i]
        
    for i in range(p - 1, 0, -1):
        tree[i] = min(tree[2 * i], tree[2 * i + 1])
        
    for _ in range(q):
        query = input().split()
        if query[0] == '1':
            k = int(query[1]) - 1 + p
            u = int(query[2])
            tree[k] = u
            k //= 2
            while k >= 1:
                tree[k] = min(tree[2 * k], tree[2 * k + 1])
                k //= 2
        else:
            a = int(query[1]) - 1 + p
            b = int(query[2]) - 1 + p
            s = float('inf')
            while a <= b:
                if a % 2 == 1:
                    s = min(s, tree[a])
                    a += 1
                if b % 2 == 0:
                    s = min(s, tree[b])
                    b -= 1
                a //= 2
                b //= 2
            sys.stdout.write(str(s) + '\n')

if __name__ == '__main__':
    solve()

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
...

Test 2

Verdict: ACCEPTED

input
200000 200000
398739055 65343131 699208332 3...

correct output
28609
129890
20378
20378
311522
...

user output
28609
129890
20378
20378
311522
...