记录编号 126532 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 GravatarJSX 是否通过 通过
代码语言 C++ 运行时间 0.213 s
提交时间 2014-10-13 17:07:58 内存使用 4.30 MiB
显示代码纯文本
#include <cstdio>
#include <cstring>
using namespace std;

int S=0,Case=0,x=0,y=0,A=0;
int T[1025][1025]={0}; 

inline int Lowbit(int x){
	return x&(-x);
} 

inline void Insert(int x,int y,int v){
	for(int i=x;i<=S;i+=Lowbit(i)){
		for(int j=y;j<=S;j+=Lowbit(j)){
			T[i][j]+=v;
		}
	}
}

inline int Sum(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+=T[i][j];
		}
	}
	return Ans;
}

int main(){
	freopen("mobilephones.in","r",stdin);
	freopen("mobilephones.out","w",stdout);
	
	while(scanf("%d",&Case)==1){
		if(Case==0){
			scanf("%d",&S);
			continue;
			memset(T,0,sizeof(T));
		}
		else{
			if(Case==1){
				scanf("%d%d%d",&x,&y,&A);
				x++;	y++;
				Insert(x,y,A);
			}
			else{
				if(Case==2){
					int x1=0,y1=0,x2=0,y2=0;
					scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
					printf("%d\n",Sum(x2+1,y2+1)+Sum(x1,y1)-Sum(x1,y2+1)-Sum(x2+1,y1));
				}
				else{
					if(Case==3)	break;
				}
			}	
		}
	}
	
	return 0;
}