记录编号 409630 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 GravatarEmine 是否通过 通过
代码语言 C++ 运行时间 0.225 s
提交时间 2017-05-28 19:41:55 内存使用 4.52 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);
			long long k=k1-k3-k4+k2;
			printf("%lld\n",k);
		}
	}
}