记录编号 232693 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 GravatarLOSER 是否通过 通过
代码语言 C++ 运行时间 0.365 s
提交时间 2016-03-02 17:26:42 内存使用 2.71 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int  maxn=1050;
int S=0,n=0;
int  c[maxn][maxn]={0};
int lowbit(int  x){
	return x&-x;
}
long long  Get_sum(int x,int y){
	long long  tot=0;
	for(int i=x;i>0;i-=lowbit(i))
		for(int j=y;j>0;j-=lowbit(j))
			tot+=c[i][j];
	return tot;
}
void Update(int x,int y,int z){
	for(int i=x;i<=n;i+=lowbit(i))
		for(int j=y;j<=n;j+=lowbit(j))
			c[i][j]+=z;
}
int  main(){
	freopen("mobilephones.in","r",stdin);
	freopen("mobilephones.out","w",stdout);
	while(scanf("%d",&S)==1,S!=3){
		if(S==0){
			scanf("%d",&n);
			memset(c,0,sizeof(c));
		}
		if(S==1){
			long long  x=0,y=0,z=0;
			scanf("%d%d%d",&x,&y,&z);
			x++;y++;
			Update(x,y,z);
		}
		if(S==2){
			long long  x1=0,y1=0,x2=0,y2=0;
			scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
			x1++;y1++;x2++;y2++;
			long long  k1=Get_sum(x2,y2);
			long long  k2=Get_sum(x1-1,y1-1);
			long long  k3=Get_sum(x1-1,y2);
			long long  k4=Get_sum(x2,y1-1);
			//cout<<"             "<<x1-1<<' '<<y2<<' '<<k3<<endl;
			//prlong long f("%d %d %d %d ",k1,k2,k3,k4);
			long long k=k1-k3-k4+k2;
			printf("%lld\n",k);
		}
	}
}