Neterukun's Library

This documentation is automatically generated by online-judge-tools/verification-helper

View the Project on GitHub Neterukun1993/Library

:heavy_check_mark: RSQ_RMultipleQ
(DataStructure/SegmentTree/RSQ_RMultipleQ.py)

概要

列に対する区間乗算、区間和取得を $O(\log n)$ で行えるデータ構造。

使い方

RSQ_RMultipleQ(n: int)
区間乗算、区間和取得が可能な長さ $n$ の配列を構築する。配列の初期値は $0$ である。計算量 $O(n)$

Depends on

Verified with

Code

from DataStructure.SegmentTree.LazySegmentTree import LazySegmentTree


MOD = 998244353


class RSQ_RMultipleQ:
    def __init__(self, n):
        unitX = 0
        unitA = 1
        X_f = lambda x1, x2: (x1 + x2) % MOD
        A_f = lambda a1, a2: a1 * a2 % MOD
        XA_map = lambda x, a: x * a % MOD
        self.st = LazySegmentTree(n, unitX, unitA, X_f, A_f, XA_map)

    def build(self, array):
        self.st.build(array)

    def __getitem__(self, i):
        return self.st[i]

    def __setitem__(self, i, x):
        self.st[i] = x

    def fold(self, l, r):
        return self.st.fold(l, r)

    def apply(self, i, a):
        self.st.apply(i, a)

    def range_apply(self, l, r, a):
        self.st.range_apply(l, r, a)
Traceback (most recent call last):
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/onlinejudge_verify/documentation/build.py", line 71, in _render_source_code_stat
    bundled_code = language.bundle(stat.path, basedir=basedir, options={'include_paths': [basedir]}).decode()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/opt/hostedtoolcache/Python/3.12.4/x64/lib/python3.12/site-packages/onlinejudge_verify/languages/python.py", line 96, in bundle
    raise NotImplementedError
NotImplementedError
Back to top page