| Task: | Dynamic Range Minimum Queries |
| Sender: | jonnymorgan |
| Submission time: | 2025-09-24 15:04:32 +0300 |
| Language: | Python3 (PyPy3) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.86 s | details |
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 |
