记录编号 265195 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 GravatarJanis 是否通过 通过
代码语言 C++ 运行时间 0.587 s
提交时间 2016-06-01 20:40:03 内存使用 7.16 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#define COGS

using namespace std;
 
const int maxn=1025;
 
int s,a,x,y,l,b,r,t;
int c[maxn][maxn];

int lowbit(int x){return x&(-x);}

void Add(int x,int y,int t){
	for(int i=x;i<=s;i+=lowbit(i))
		for(int j=y;j<=s;j+=lowbit(j))c[i][j]+=t;
}
int GetSum(int x,int y){
	int ans=0;
	for(int i=x;i>0;i-=lowbit(i))
		for(int j=y;j>0;j-=lowbit(j))ans+=c[i][j];
	return ans;
}
int Out(int l,int b,int r,int t){
	return GetSum(r,t)-GetSum(r,b-1)-GetSum(l-1,t)+GetSum(l-1,b-1);
}
void Init(){
	cin>>a>>s;
	while(cin>>a && a!=3){
		if(a==1){
			cin>>x>>y>>t;
			Add(x+1,y+1,t);
			continue;
		}
		if(a==2){
			cin>>l>>b>>r>>t;
			cout<<Out(l+1,b+1,r+1,t+1)<<endl;
			continue;
		}
	}
}
int main()
{
	ios::sync_with_stdio(false);
	#ifdef COGS
		freopen("mobilephones.in","r",stdin);
		freopen("mobilephones.out","w",stdout);
	#endif
	Init();
	return 0;//先提个注意点,由于Lowbit(0) = 0,这会导致x递增的那条路径发生死循环,所
			//有当树状数组中可能出现0时,我们都全部加一,这样可以避免0带来的麻烦~~
}