Submission details
Task:Dynamic Range Minimum Queries
Sender:jonnymorgan
Submission time:2025-09-24 15:04:32 +0300
Language:Python3 (PyPy3)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.86 sdetails

Code

n, q = map(int, input().split())
arr = list(map(int, input().split()))

tree = [0] * (2 * n)

for i in range(n):
    tree[n + i] = arr[i]

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


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


def query(a, b):
    a += n
    b += n
    result = float('inf')
    while a <= b:
        if a % 2 == 1:
            result = min(result, tree[a])
            a += 1
        if b % 2 == 0:
            result = min(result, tree[b])
            b -= 1
        a //= 2
        b //= 2
    return result


for _ in range(q):
    line = list(map(int, input().split()))
    if line[0] == 1:
        k, u = line[1] - 1, line[2]
        update(k, u)
    else:
        a, b = line[1] - 1, line[2] - 1
        print(query(a, b))

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: ACCEPTED

input
200000 200000
398739055 65343131 699208332 3...

correct output
28609
129890
20378
20378
311522
...

user output
28609
129890
20378
20378
311522
...
Truncated