Cod sursa(job #2449567)

Utilizator voyagerSachelarie Bogdan voyager Data 20 august 2019 03:50:10
Problema Arbori de intervale Scor 20
Compilator py Status done
Runda Arhiva educationala Marime 1.11 kb
#!/usr/bin/env python3

import sys
sys.stdout = open('arbint.out', 'w')

with open('arbint.in', 'r') as f:
    readInts = lambda: map(int, f.readline().split())
    N, M = tuple(readInts())

    T = [0] * (2 * N + 100)

    def update(i, val, idx=1, l=1, r=N):
        if l == r == i:
            T[idx] = val
        else:
            m = l + (r - l) // 2
            if l <= i <= m:
                update(i, val, idx * 2, l, m)
            else:
                update(i, val, idx * 2 + 1, m + 1, r)
            T[idx] = max(T[idx * 2], T[idx * 2 + 1])

    def query(ql, qr, idx=1, l=1, r=N):
        if ql <= l and qr >= r:
            return T[idx]
        else:
            m, mx = l + (r - l) // 2, 0
            if ql <= m:
                mx = query(ql, qr, idx * 2, l, m)
            if qr > m:
                mx = max(mx, query(ql, qr, idx * 2 + 1, m + 1, r))
            return mx

    for i, x in enumerate(readInts()):
        update(i + 1, x)

    for _ in range(M):
        op = tuple(readInts())
        if op[0] == 0:
            print(query(op[1], op[2]))
        elif op[0] == 1:
            update(op[1], op[2])