This documentation is automatically generated by online-judge-tools/verification-helper
#include "src/data-structure/BIT.hpp"
1 点加算・区間和ができるデータ構造
BIT(ll n)
:長さ $n$ の配列を作るvoid add(ll i, ll x)
:A[i] += x
を行うll sum(ll r)
:sum(A[:r])
を求めるll sum(ll l, ll r)
:sum(A[l:r])
を求める計算量 $O(\log n)$ / クエリ
struct BIT {
vector<ll> a;
BIT(ll n) : a(n + 1) {}
void add(ll i, ll x) { // A[i] += x
i++;
while(i < sz(a)) {
a[i] += x;
i += i & -i;
}
}
ll sum(ll r) {
ll s = 0;
while(r) {
s += a[r];
r -= r & -r;
}
return s;
}
ll sum(ll l, ll r) { // sum of A[l, r)
return sum(r) - sum(l);
}
};
#line 1 "src/data-structure/BIT.hpp"
struct BIT {
vector<ll> a;
BIT(ll n) : a(n + 1) {}
void add(ll i, ll x) { // A[i] += x
i++;
while(i < sz(a)) {
a[i] += x;
i += i & -i;
}
}
ll sum(ll r) {
ll s = 0;
while(r) {
s += a[r];
r -= r & -r;
}
return s;
}
ll sum(ll l, ll r) { // sum of A[l, r)
return sum(r) - sum(l);
}
};