#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-03 17:17:41 发布