题目
输入样例
输入样例1:
5 5
1 5 4 2 3
1 1 3
2 2 5
1 3 -1
1 4 2
2 1 4
输入样例2:
2 2
0 0
1 1 1
2 1 2
输入样例3:
4 3
1 2 3 4
1 3 -1
2 3 4
2 1 2
输出样例
输出样例1:
14
16
输出样例2:
1
输出样例3:
6
3
解题思路
纯粹模板
树状数组
Code
#include <bits/stdc++.h>
#define N 500000
#define ll long long
using namespace std;
ll n, m, x, y, c, t[N + 200];
ll lowbit(ll x) { return (x & -x); }
void add(ll x, ll y) {
for(; x <= n; x += lowbit(x)) t[x] += y;
}
ll sum(ll x) {
ll ans = 0;
for(; x; x -= lowbit(x)) ans += t[x];
return ans;
}
int main() {
scanf("%lld %lld", &n, &m);
for(int i = 1; i <= n; i ++) {
scanf("%lld", &c);
add(i, c);
}
for(int i = 1; i <= m; i ++) {
scanf("%lld %lld %lld", &c, &x, &y);
if(c == 1) add(x, y);
else printf("%lld\n", sum(y) - sum(x - 1));
}
}