Exemplo n.º 1
0
def main() -> None:
    N, Q = map(int, input().split())
    default = (1 << 31) - 1
    rmq = SegmentTree(N, min, default)
    for _ in range(Q):
        com, x, y = map(int, input().split())
        if com == 0:
            rmq.update(x, y)
        else:
            print(rmq.query(x, y + 1))
Exemplo n.º 2
0
def main() -> None:
    _, Q = map(int, input().split())
    A = [int(x) for x in input().split()]
    rmq = SegmentTree.create_from_array(A, min, 10**9)
    ans = []
    for _ in range(Q):
        l, r = map(int, input().split())
        ans.append(rmq.query(l, r))
    print(*ans, sep="\n")
Exemplo n.º 3
0
def main() -> None:
    _, Q = map(int, input().split())
    A = [int(x) for x in input().split()]
    rsq = SegmentTree.create_from_array(A, operator.add, 0)
    ans = []
    for _ in range(Q):
        type_, l, r = map(int, input().split())
        if type_ == 0:
            rsq.update(l, rsq[l] + r)
        else:
            ans.append(rsq.query(l, r))
    print(*ans, sep="\n")
def main() -> None:
    N, Q = map(int, input().split())
    A = [tuple(map(int, input().split())) for _ in range(N)]
    mod = 998244353

    def merge(l, r, mod=mod):
        return l[0] * r[0] % mod, (l[1] * r[0] + r[1]) % mod

    segt = SegmentTree.create_from_array(A, merge, (1, 0))
    ans = []
    for _ in range(Q):
        t, a, b, c = map(int, input().split())
        if t == 0:
            segt.update(a, (b, c))
        else:
            a1, a2 = segt.query(a, b)
            ans.append((a1 * c + a2) % mod)
    print(*ans, sep="\n")
Exemplo n.º 5
0
def main() -> None:
    N, Q = map(int, input().split())
    weights = [int(x) for x in input().split()]
    graph = Graph(N)
    for _ in range(N - 1):
        u, v = map(int, input().split())
        graph.add_edge(u, v, 1)
        graph.add_edge(v, u, 1)
    hld = HeavyLightDecomposition(graph)
    new_weights = [0] * N
    for i in range(N):
        new_weights[hld.vid[i]] = weights[i]
    rsq = SegmentTree.create_from_array(new_weights, operator.add, 0)

    ans = []
    for _ in range(Q):
        t, a, b = map(int, input().split())
        if t == 0:
            rsq[hld.vid[a]] = rsq[hld.vid[a]] + b
        else:
            ans.append(hld.query_path(a, b, 0, rsq.query, operator.add))
    print(*ans, sep="\n")
Exemplo n.º 6
0
def main() -> None:
    N, Q = map(int, input().split())
    weights = [int(x) for x in input().split()]
    graph = Graph(N)
    for i, v in enumerate(map(int, input().split())):
        graph.add_edge(i + 1, v, 1)
        graph.add_edge(v, i + 1, 1)
    hld = HeavyLightDecomposition(graph, 0, True)
    new_weights = [0] * N
    for i in range(N):
        new_weights[hld.vid[i]] = weights[i]
    rsq = SegmentTree.create_from_array(new_weights, operator.add, 0)

    ans = []
    for _ in range(Q):
        query = [int(x) for x in input().split()]
        if query[0] == 0:
            a, b = query[1:]
            rsq[hld.vid[a]] = rsq[hld.vid[a]] + b
        else:
            u = query[1]
            ans.append(rsq.query(hld.vid[u], hld.tail[u]))
    print(*ans, sep="\n")