| 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 | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.75 s | details |
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 ... |
