Submission details
Task:Dynamic Range Minimum Queries
Sender:aalto26dh_038
Submission time:2026-09-18 00:21:55 +0300
Language:Python3 (PyPy3)
Status:READY
Result:
Test results
testverdicttime
#1ACCEPTED0.06 sdetails
#2--details

Code

import sys
from functools import lru_cache


def next_pow2(n):
    if n <= 1:
        return 1
    return 1 << (n - 1).bit_length()


class SegmentTree:
    def __init__(self, arr: list[int]) -> None:

        biggie = 10**9
        while len(arr) < next_pow2(len(arr)):
            arr.append(biggie)
        self.n = len(arr)

        self.tree = [0] * self.n + arr

        for k in range(self.n - 1, -1, -1):
            self.tree[k] = min(self.tree[2 * k], self.tree[2 * k + 1])

    def update(self, k: int, u: int) -> None:
        k = self.n + k - 1
        self.tree[k] = u
        k = k // 2
        while k >= 1:
            prev = self.tree[k]
            self.tree[k] = min(self.tree[2 * k], self.tree[2 * k + 1])
            if self.tree[k] == prev:
                return
            k = k // 2

    def min(self, a: int, b: int) -> int:
        MAX_VAL = 10**9

        @lru_cache(maxsize=None)
        def mini_min(node: int, l: int, r: int) -> int:

            if l > b or r < a:
                return MAX_VAL

            if node >= len(self.tree):
                return MAX_VAL

            mid = (l + r) // 2
            return min(
                self.tree[node] if l >= a and r <= b else MAX_VAL,
                mini_min(node * 2 + 1, mid + 1, r),
                mini_min(node * 2, l, mid),
            )

        return mini_min(1, 1, self.n)


def main():
    data = sys.stdin.buffer.read().split()
    it = iter(data)
    n = int(next(it))
    q = int(next(it))
    arr = [int(next(it)) for _ in range(n)]
    queries = [(int(next(it)), int(next(it)), int(next(it))) for _ in range(q)]

    st = SegmentTree(arr)
    for op, x, y in queries:
        if op == 1:
            st.update(x, y)
        else:
            print(st.min(x, y))


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:

input
200000 200000
398739055 65343131 699208332 3...

correct output
28609
129890
20378
20378
311522
...

user output
(empty)