TAG- 芝士水题、算法 − 【树状数组、差分】 芝士水题、算法 - 【树状数组、差分】 芝士水题、算法−【树状数组、差分】时间复杂度- O ( N ∗ log N ) O(N \ast \log N) O(N∗logN)
//
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define data da
const int N = 1e5 + 6;
int tree[N], in[N];
int n, m;
int lowbit(int x) {
return x & -x;
}
void add(int idx, int data) {
for (int i = idx; i <= n; i += lowbit(i)) {
tree[i] += data;
}
}
int sum(int idx) {
int ans = 0;
for (int i = idx; i; i -= lowbit(i)) {
ans += tree[i];
}
return ans;
}
void solve() {
scanf("%lld%lld", &n, &m);
for (int i = 1; i <= n; i++) scanf("%lld", &in[i]);
for (int i = 1; i <= n; i++) add(i, in[i] - in[i - 1]);
while (m--) {
char op;
cin >> op;
if (op == 'C') {
int x, y, data;
scanf("%lld%lld%lld", &x, &y, &data);
add(x, data);
add(y + 1, -data); //
} else if (op == 'Q') {
int idx;
scanf("%lld", &idx);
printf("%lld\n", sum(idx));
}
}
}
signed main() {
int t = 1;
// scanf("%d", &t);
while (t--) solve();
return 0;
}
实现细节
- `
参考示意图
-
`
参考链接
- `
作者 | 乐意奥AI
本文介绍了如何使用树状数组(也称段树)数据结构解决一个涉及整数序列的查询和更新问题,时间复杂度为O(N*logN),并附有代码实例和参考链接。

被折叠的 条评论
为什么被折叠?



