src/watashi/bit.hpp
Code
#include <vector>
using namespace std;
template<typename T = int>
struct BIT {
vector<T> a;
void init(int n) {
vector<T>(n + 1).swap(a);
}
void add(int i, T v) {
for (int j = i + 1; j < (int)a.size(); j = (j | (j - 1)) + 1) {
a[j] += v;
}
}
// [0, i)
T sum(int i) const {
T ret = T();
for (int j = i; j > 0; j = j & (j - 1)) {
ret += a[j];
}
return ret;
}
T get(int i) const {
return sum(i + 1) - sum(i);
}
void set(int i, T v) {
add(i, v - get(i));
}
};
#line 1 "src/watashi/bit.hpp"
#include <vector>
using namespace std;
template<typename T = int>
struct BIT {
vector<T> a;
void init(int n) {
vector<T>(n + 1).swap(a);
}
void add(int i, T v) {
for (int j = i + 1; j < (int)a.size(); j = (j | (j - 1)) + 1) {
a[j] += v;
}
}
// [0, i)
T sum(int i) const {
T ret = T();
for (int j = i; j > 0; j = j & (j - 1)) {
ret += a[j];
}
return ret;
}
T get(int i) const {
return sum(i + 1) - sum(i);
}
void set(int i, T v) {
add(i, v - get(i));
}
};
Back to top page