Neterukun's Library

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

View the Project on GitHub Neterukun1993/Library

:heavy_check_mark: 一点加算・区間和取得
(DataStructure/BinaryIndexedTree/PointAddRangeSum.py)

概要

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

使い方

BinaryIndexedTree(n: int)
長さ $n$ の Binary Indexed Tree を構築する。初期値はすべて $0$ である。計算量 $O(n)$

Required by

Verified with

Code

class BinaryIndexedTree:
    def __init__(self, n):
        self.size = n
        self.bit = [0] * (self.size + 1)

    def build(self, array):
        for i, val in enumerate(array):
            self.bit[i + 1] = val
        for i in range(1, self.size):
            if i + (i & -i) > self.size:
                continue
            self.bit[i + (i & -i)] += self.bit[i]

    def _sum(self, i):
        s = 0
        while i > 0:
            s += self.bit[i]
            i -= i & -i
        return s

    def add(self, i, val):
        i += 1
        while i <= self.size:
            self.bit[i] += val
            i += i & -i

    def sum(self, l, r):
        """sum of values in range [l, r)"""
        return self._sum(r) - self._sum(l)

    def bisect_left(self, val):
        """minimum idx s.t. sum[0, idx) >= val"""
        if val <= 0:
            return 0
        idx = 0
        k = 1 << self.size.bit_length()
        while k:
            if idx + k <= self.size and self.bit[idx + k] < val:
                val -= self.bit[idx + k]
                idx += k
            k >>= 1
        return idx + 1
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