#include <iostream>
#include <algorithm>
#include <string.h>
#include <stdio.h>
#include <math.h>
#define LL long long
using namespace std;
const int MAXN = 1e3+10;
int dp[MAXN][MAXN];
int lowbit(int k){return k&-k;}
void updata(int n,int x,int y,int value){
for(int i = x; i <= n; i+=lowbit(i)){
for(int j = y; j <= n; j+=lowbit(j)){
dp[i][j] += value;
}
}
}
int query(int x,int y){
int sum = 0;
for(int i = x; i > 0; i-=lowbit(i)){
for(int j = y; j > 0; j-=lowbit(j))
sum += dp[i][j];
}
return sum;
}
int main(){
int n,a;
cin>>n;
memset(dp,0,sizeof(dp));
int m;
cin>>m;
int x,y,z,t;
while(m--){
cin>>t;
if(t==1){
cin>>x>>y;
cout<<query(x,y)<<endl;
}
else{
cin>>x>>y>>z;
updata(n,x,y,z);
}
}
}二维树状数组
最新推荐文章于 2024-06-25 07:43:02 发布
本文介绍了一种使用二维数状数组实现高效区间更新与查询的方法。通过定义lowbit函数来获取当前值的最低位1,实现了对于给定范围内的元素进行增减操作(updata函数)以及查询指定坐标范围内所有元素的累积和(query函数)。该方法适用于解决一些特定类型的编程问题。
2804

被折叠的 条评论
为什么被折叠?



