二位树状数组求调
  • 板块学术版
  • 楼主qinshi0308
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/11/13 19:58
  • 上次更新2023/11/13 21:36:20
查看原帖
二位树状数组求调
672237
qinshi0308楼主2023/11/13 19:58

rt

题目

# include <bits/stdc++.h>
using namespace std;
struct Tree2{
	long long tree[4100][4100]={0};
	inline int lowbit(int i){
		return i&-i;
	}
	inline void add(long long x,int i,int j,int n,int m){
		while(i<=n){
			while(j<=m){
				tree[i][j]+=x;
				j+=lowbit(j);
			}
			i+=lowbit(i);
		}
	}
	inline int query(int i,int j){
		long long sum=0;
		while(i>0){
			while(j>0){
				sum+=tree[i][j];
				j-=lowbit(j);
			}
			i-=lowbit(i);
		}
		return sum;
	}
	inline long long query2(int x1,int y1,int x2,int y2){
		return query(x2,y2)-query(x1-1,y2)-query(x2,y1-1)+query(x1-1,y1-1);
	}
}t1;
int main(){
	int n,m;
	cin>>n>>m;
	int a;
	while(cin>>a){
		if(a==1){
			int x,y,k;
			cin>>x>>y>>k;
			t1.add(k,x,y,n,m); 
		}else{
			int x1,y1,x2,y2;
			cin>>x1>>y1>>x2>>y2;
			cout<<t1.query2(x1,y1,x2,y2)<<endl;    
		}
	} 
	return 0;
}

样例输入:

2 2
1 1 1 3
1 2 2 4
2 1 1 2 2

正确输出:

7

程序输出:

4
2023/11/13 19:58
加载中...