Saito Asuka saiko!!!

有些走累了呢 有些走累了呢 虽然以那麼平凡的表现 来形容人生的漫长道路 想稍稍休息下呢 想稍稍休息下呢 时间每分每刻都这样残酷 将我紧拖著前行...

1zoj 打鼹鼠|板子|二维树状数组

题目描述

打鼹鼠 题目描述

思路

二维树状数组板子题

代码

#include <cstdio>
#include <iostream>
using namespace std;
void read(int &n){
	int num=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch=='-') w=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		num=num*10+ch-'0';
		ch=getchar();
	}
	n=num*w;
}
const int maxn=10005;
int n,c[maxn][maxn];
int lowbit(int x){return x&(-x);}
void update(int x,int y,int v){
	for(int i=x;i<=n;i+=lowbit(i))
		for(int j=y;j<=n;j+=lowbit(j))
			c[i][j]+=v;
}
int query(int x,int y){
	int ans=0;
	for(int i=x;i;i-=lowbit(i))
		for(int j=y;j;j-=lowbit(j))
			ans+=c[i][j];
	return ans;
}
int main(){
	read(n);
	while(1){
		int m,x,y;read(m);
		switch(m){
			case 1:
				int v;read(x);read(y);read(v);
				update(x+1,y+1,v);
				break;
			case 2:
				int x1,y1;read(x);read(y);read(x1);read(y1);
				x++;y++;x1++;y1++;
				printf("%d\n",query(x1,y1)-query(x1,y-1)+query(x-1,y-1)-query(x-1,y1));
				break;
			case 3:
				return 0;
		}
	}
	return 0;
}
posted @ 2018-11-18 14:03  斋藤飞鸟  阅读(293)  评论(0编辑  收藏  举报
动画加载完毕