Cod sursa(job #2634846)

Utilizator mihai50000Mihai-Cristian Popescu mihai50000 Data 12 iulie 2020 14:08:07
Problema Arbori de intervale Scor 0
Compilator py Status done
Runda Arhiva educationala Marime 1.39 kb
from sys import stdin, stdout

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

n, m = [int(x) for x in stdin.readline().split()]

vec = [0 for i in range(n + 1)]
arb = [0 for i in range(n * 2 + 1)]

j = 0

def build(pos, l, r):

    if l == r:
        arb[pos] = vec[l]
        pass

    mid = (l + r) / 2
    mid = int(mid)

    build(pos * 2, l, mid)
    build(pos * 2 + 1, mid + 1, r)

    arb[pos] = max(arb[pos * 2], arb[pos * 2 + 1])

def update(pos, l, r, a, b):

    if l == r:
        arb[pos] = b
        pass

    mid = (l + r) / 2
    mid = int(mid)

    if a <= mid:
        update(pos * 2, l, mid, a, b)
    else:
        update(pos * 2 + 1, mid + 1, r, a, b)

    arb[pos] = max(arb[pos * 2], arb[pos * 2 + 1])

def query(pos, l, r, a, b):

    if a <= l and r <= b:
        return arb[pos]

    mid = (l + r) / 2;
    mid = int(mid)
    ans = 0

    if a <= mid:
        ans = max(ans, query(pos * 2, l, mid, a, b))

    if b > mid:
        ans = max(ans, query(pos * 2 + 1, mid + 1, r, a, b))

    return ans

for i in stdin.readline().split():
    j += 1
    vec[j] = int(i)

build(1, 1, n)

while(m > 0):
    m -= 1
    op, a, b = [int(x) for x in stdin.readline().split()]

    if op == 0 :
        stdout.write(str(query(1, 1, n, a, b)) + '\n')
    else:
        update(1, 1, n, a, b)

stdout.close()
sys.exit()