链接
用树状数组进行单点修改和区间查询.
Code:
#include <bits/stdc++.h>
#define lowbit(x) (x & (-x))
using i64 = long long;
i64 tree[100010], n, w;
void add(i64 x, i64 k) {
for (int i = x; i <= n; i += lowbit(i)) {
tree[i] += k;
}
//单点修改
}
i64 sum(i64 x) {
i64 ans = 0;
for (i64 i = x; i > 0; i -= lowbit(i)) {
ans += tree[i];
}
return ans;
//区间查询
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> w;
for (int i = 0; i < w; i++) {
char ch;
i64 x, y;
std::cin >> ch >> x >> y;
if (ch == 'x') {
add(x, y);
} else {
std::cout << sum(y) - sum(x - 1) << "\n";
}
}
return 0;
}