题解分享
题解分享简介
单点修改区间查询 - 题解
```
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
using ULL = unsigned long long;
const int N = 1e6+5;
int n, q;
ll a[N],t[N];
inline int lowbit(int x) {return x & (-x);}
inline void update(int k,ll x) {
for (int i = k; i <= n; i += lowbit(i))
t[i] += x;
}
inline ll getsum(int k) {
ll res = 0;
for (int i = k; i > 0; i -= lowbit(i))
res += t[i];
return res;
}
inline void solve() {
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = 1; i<= n; i++) update(i,a[i]);
for (; q-- ;){
int op; cin >> op;
if (op == 1) {
ll k, v; cin >> k >> v;
update(k,v);
}else {
ll l, r; cin >> l >> r;
cout << getsum(r) - getsum(l - 1) << endl;
}
}
}
int main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
//int _; cin >> _;
while (_--) solve();
return 0;
}
```
查看全文
0
0
0
6



