Submission details
Task:Dynamic Range Minimum Queries
Sender:aalto26dh_006
Submission time:2026-09-21 13:38:59 +0300
Language:Python3 (PyPy3)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.75 sdetails

Code

import math

def main():
    n, q = [int(x) for x in input().split()]
    values = [int(x) for x in input().split()]

    N = 1
    while N < n:
        N *= 2

    tree = [float('inf')] * N * 2

    for i in range(n):
        tree[N + i] = values[i]
    for i in range(N - 1, 0, -1):
        tree[i] = min(tree[i * 2], tree[i * 2 + 1])

    def update(k, x):
        k += N
        tree[k] = x
        k //= 2
        while k >= 1:
            tree[k] = min(tree[k * 2], tree[k * 2 + 1])
            k //= 2

    def query(a, b):
        a += N
        b += N
        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
        return s

    for _ in range(q):
        action = [int(x) for x in input().split()]

        if action[0] == 1:
            update(action[1] - 1, action[2])
        else:
            print(query(action[1] - 1, action[2] - 1))

main()

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