#include<bits/stdc++.h>
#define lowbit(x) x&(-x)
#define int long long
using namespace std;
const int N = 5e5 + 5;
int n, m, C[N];
void add(int pos, int num) {
while (pos <= n) {
C[pos] += num;
pos += lowbit(pos);
}
}
int sum(int pos) {
int sum = 0;
while (pos) {
sum += C[pos];
pos -= lowbit(pos);
}
return sum;
}
signed main() {
cin >> n >> m;
int last = 0;
for (int i = 1; i <= n; i++) {
int num; cin >> num;
add(i, num - last);
last = num;
}
while (m--) {
int op; cin >> op;
if (op == 1) {
int x, y, k; cin >> x >> y >> k;
add(x, k); add(y + 1, -k);
}
else {
int x; cin >> x;
cout << sum(x) << endl;
}
}
return 0;
}
【例题记录】树状数组及差分
最新推荐文章于 2024-08-18 21:07:18 发布