#include <bits/stdc++.h>
using namespace std;
//树状数组的查询和修改的时间复杂度都是 log (n) ,空间复杂度则为 O (n)
class NumArray {
public:
#define lowbit(x) (x & (-x))
class FenwichTree {
public:
int n;
vector<int> c;
FenwichTree(int size) : n(size), c(size + 1) {}
void add(int i, int x) {
while (i <= n) c[i] += x, i += lowbit(i);
}
int at(int i) {
return query(i) - query(i - 1);
}
int query(int i) {
int sum = 0;
while (i > 0) sum += c[i], i -= lowbit(i);
return sum;
}
};
int n;
FenwichTree tree;
NumArray(vector<int>& nums) : n(nums.size()), tree(n) {
for (int i = 0; i < n; i++) tree.add(i + 1, nums[i]);
}
void update(int index, int val) {
tree.add(index + 1, val - tree.at(index + 1));
}
int sumRange(int left, int right) {
int r = tree.query(right + 1);
int l = tree.query(left);
return r - l;
}
};
int main() {
return 0;
}
关于树状数组
最新推荐文章于 2024-07-23 17:36:37 发布