Submission details
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 results
testverdicttime
#1ACCEPTED0.04 sdetails
#2ACCEPTED0.41 sdetails

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
...