| Task: | Dynamic Range Minimum Queries |
| Sender: | aalto26dh_026 |
| Submission time: | 2026-09-23 03:49:44 +0300 |
| Language: | Python3 (PyPy3) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.04 s | details |
| #2 | ACCEPTED | 0.41 s | details |
Code
import sys
def main():
data = sys.stdin.buffer.read().split()
idx = 0
n = int(data[idx]); idx += 1
q = int(data[idx]); idx += 1
a = data[idx:idx+n]
a = list(map(int, a))
idx += n
size = n
INF = float('inf')
seg = [INF] * (2 * size)
# build
for i in range(size):
seg[size + i] = a[i]
for i in range(size - 1, 0, -1):
seg[i] = seg[2*i] if seg[2*i] < seg[2*i+1] else seg[2*i+1]
def update(pos, val):
pos += size
seg[pos] = val
pos >>= 1
while pos >= 1:
left = seg[2*pos]
right = seg[2*pos+1]
seg[pos] = left if left < right else right
pos >>= 1
def query(l, r): # inclusive, 0-indexed
l += size
r += size + 1
res = INF
while l < r:
if l & 1:
if seg[l] < res: res = seg[l]
l += 1
if r & 1:
r -= 1
if seg[r] < res: res = seg[r]
l >>= 1
r >>= 1
return res
out = []
for _ in range(q):
t = int(data[idx]); idx += 1
x = int(data[idx]); idx += 1
y = int(data[idx]); idx += 1
if t == 1:
update(x - 1, y)
else:
out.append(query(x - 1, y - 1))
sys.stdout.write('\n'.join(map(str, out)) + '\n')
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 ... |
