Submission details
Task:Dynamic Range Minimum Queries
Sender:luukwin
Submission time:2025-09-22 12:58:46 +0300
Language:Python3 (PyPy3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.04 sdetails
#20.63 sdetails

Code

import math

n, q = [int(x) for x in input().split()]
array = [int(x) for x in input().split()]
minimums = [[-1 for _ in range(n + 1)] for _ in range(n + 1)]

# def calculateMins():
#     for i in range(n):
#         for j in range(i, n):
#             if i != j and math.log2(j-i + 1) % 1 == 0:
#                 minimums.update({str((i+1, j+1)) : min(array[i:j+1])}) 
#     # print(minimums)
#     return minimums

def calculateMin(a, b):
    if minimums[a][b] != -1: return minimums[a][b]
    if a == b: value = array[max(0, a - 1)]
    elif a + 1 == b or a - 1 == b: value = min(array[max(0, a - 1)], array[b - 1])
    else:
        minPower = 2 ** int(math.log2(b-a+1))
        if minPower >= b: minPower = 2 ** int(math.log2(b-a))
        w = int(minPower / 2)
        value = min(calculateMin(a, a + w - 1), calculateMin(a + w, b))
    minimums[a][b] = value
    return value

output = []
for i in range(q):
    action, k, u = [int(x) for x in input().split()]
    if action == 1: 
        array[k - 1] = u
        minimums = [[-1 for _ in range(n + 1)] for _ in range(n + 1)]
    else: output.append(str(calculateMin(k, u)))

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:

input
200000 200000
398739055 65343131 699208332 3...

correct output
28609
129890
20378
20378
311522
...

user output
(empty)