题解
2024-06-26 17:16:19
发布于:广东
11阅读
0回复
0点赞
,实际上我也看不懂,不管了,会写就行(
#include <iostream>
#include <cstdio>
using namespace std;
int a[500005];
long c[500005];
int n, t;
int lowbit(int n){
return n & -n;
}
int add(int idx, int val){
for(int i = idx; i <= n; i += lowbit(i)) c[i] += val;
}
long get_(int idx){
long ct = 0;
for(int i = idx; i; i -= lowbit(i)) ct += c[i];
return ct;
}
int read(){
char c = getchar();
int x = 0, f = 1;
while(!isdigit(c)){
if(c == '-') f = -f;
c = getchar();
}
while(isdigit(c)){
x = (x << 3) + (x << 1) + c - '0';
c = getchar();
}
return x * f;
}
int main(){
n = read(), t = read();
for(int i = 1; i <= n; i++){
a[i] = read();
add(i, a[i]);
}
int tmp, l, r, k, idx;
while(t--){
tmp = read();
if(tmp == 1){
idx = read(), k = read();
add(idx, k);
}else{
l = read(), r = read();
printf("%ld\n", get_(r) - get_(l - 1));
}
}
return 0;
}
这里空空如也
有帮助,赞一个