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

Code

n, q = [int(x) for x in input().split()]
N = 1 << (n-1).bit_length()
# print(N)
array = [int(x) for x in input().split()]
minimums = [10**10 for _ in range(2*N)]
for i in range(n):
    minimums[N+i] = array[i]


def BuildSparseTree():
    for i in range(N-1, 0, -1):
        minimums[i] = min(minimums[i*2], minimums[i*2+1])

BuildSparseTree()

output = []
for i in range(q):
    action, k, u = [int(x) for x in input().split()]
    if action == 1: 
        pos = N + k - 1
        minimums[pos] = u
        pos //=2
        while pos > 0:
            minimums[pos] = min(minimums[pos*2], minimums[pos*2+1])
            pos //=  2
    else: 
        l = N + k - 1
        r = N + u
        s = 10 ** 10
        while l < r:
            if l & 1: 
                s = min(s, minimums[l])
                l += 1
            if r&1: 
                r -= 1
                s = min(s, minimums[r])
            l //= 2
            r //= 2
        output.append(str(s))

print("\n".join(output))

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