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

Code

import sys


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

        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

            if a <= l and b >= r:
                return self.tree[node]

            mid = (l + r) // 2
            return min(
                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)]

    st = SegmentTree(arr)
    out = []
    for _ in range(q):
        op = int(next(it))
        x = int(next(it))
        y = int(next(it))
        if op == 1:
            st.update(x, y)
        else:
            out.append(st.min(x, y))

    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:

input
200000 200000
398739055 65343131 699208332 3...

correct output
28609
129890
20378
20378
311522
...

user output
(empty)