| Task: | Dynamic Range Minimum Queries |
| Sender: | badr_masaaf |
| Submission time: | 2025-09-23 23:08:30 +0300 |
| Language: | Python3 (PyPy3) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.47 s | details |
Code
import sys
input = sys.stdin.readline
class SegmentTree:
def __init__(self, arr):
self.n = len(arr)
self.size = 1
while self.size < self.n:
self.size *= 2
self.tree = [10**18] * (2 * self.size)
for i in range(self.n):
self.tree[self.size + i] = arr[i]
for i in range(self.size - 1, 0, -1):
self.tree[i] = min(self.tree[2*i], self.tree[2*i+1])
def update(self, idx, val):
pos = self.size + idx
self.tree[pos] = val
pos //= 2
while pos:
self.tree[pos] = min(self.tree[2*pos], self.tree[2*pos+1])
pos //= 2
def query(self, l, r):
l += self.size
r += self.size
res = 10**18
while l <= r:
if l % 2 == 1:
res = min(res, self.tree[l])
l += 1
if r % 2 == 0:
res = min(res, self.tree[r])
r -= 1
l //= 2
r //= 2
return res
n, q = map(int, input().split())
arr = list(map(int, input().split()))
st = SegmentTree(arr)
for _ in range(q):
t, a, b = map(int, input().split())
if t == 1:
st.update(a-1, b)
else:
print(st.query(a-1, b-1))
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 |
