Quetzal-CoaTL
The Coalescence Template Library
Loading...
Searching...
No Matches
BIT.hpp
1class BIT
2{
3 private:
4 vector<int> data;
5
6 public:
7 BIT(vector<int> nums)
8 {
9 data.resize(nums.size() + 1);
10 for (int i = 0; i < nums.size(); ++i)
11 {
12 add(i, nums[i]);
13 }
14 }
15
16 BIT(int n)
17 {
18 data.resize(n + 1);
19 }
20
21 // add the value val to index i
22 void add(int i, int val)
23 {
24 ++i;
25 while (i < data.size())
26 {
27 data[i] += val;
28 i += (i & (-i));
29 }
30 }
31
32 // get the prefix sum from 0 to i
33 int sum(int i)
34 {
35 ++i;
36 int v = 0;
37 while (i)
38 {
39 v += data[i];
40 i -= (i & (-i));
41 }
42 return v;
43 }
44
45 // get the range sum between [i, j]
46 int queryRange(int i, int j)
47 {
48 return sum(j) - sum(i - 1);
49 }
50};
Definition BIT.hpp:2