1 #ifndef dsa_BinaryIndexTree_H__
2 #define dsa_BinaryIndexTree_H__
23 std::vector<Value> array_;
48 array_(tree2.array_) {
60 void reset(
size_t size, Value
const& init) {
62 array_.resize(size, init);
74 void update(
size_t index, Value
const& value) {
76 for ( ; index <= array_.size(); index += (index & -index)) {
77 array_[index - 1] = array_[index - 1] + value;
90 Value
query(ssize_t index)
const {
91 index = std::min(index + 1, (ssize_t)array_.size());
93 for ( ; 0 < index; index -= (index & -index)) {
94 ret = ret + array_[index - 1];
102 #endif // dsa_BinaryIndexTree_H__