Cod sursa(job #2909933)

Utilizator uwuenvyJeff Joe uwuenvy Data 17 iunie 2022 01:15:07
Problema Arbori de intervale Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.01 kb
from sys import stdin, stdout

# maximum segment tree
class SegmentTree:
    def __init__(self, n):
        self.n = n
        self.tree = [0] * (2 * n)

    def update(self, i, x):
        i += self.n
        self.tree[i] = x
        while i > 1:
            i //= 2
            self.tree[i] = max(self.tree[i * 2], self.tree[i * 2 + 1])

    def query(self, l, r):
        l += self.n
        r += self.n
        res = 0
        while l < r:
            if l & 1:
                res = max(res, self.tree[l])
                l += 1
            if r & 1:
                r -= 1
                res = max(res, self.tree[r])
            l //= 2
            r //= 2
        return res

stdin = open("arbint.in", "r")
stdout = open("arbint.out", "w")

n, m = map(int, input().split())
a = list(map(int, input().split()))

st = SegmentTree(n)
for i in range(len(a)):
    st.update(i, a[i])

for _ in range(m):
    t, a, b = map(int, input().split())
    if t == 1:
        st.update(a - 1, b)
    else:
        print(st.query(a - 1, b - 1))