记录编号 162673 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 Gravatarstdafx.h 是否通过 通过
代码语言 C++ 运行时间 0.119 s
提交时间 2015-05-18 17:06:02 内存使用 4.30 MiB
显示代码纯文本
#include <cstdio>

using namespace std;

int data[1025][1025],ml,n,x,y,x1,y1;

inline int in(){
	char c=getchar();
	int x=0;bool f=0;
	while(c<'0'||c>'9'){
		if(c=='-') f=1;
		c=getchar();
	}
	for(;c>='0'&&c<='9';c=getchar())x=x*10+c-48;
	if(f) return -x;
	return x;
}

inline void modify(int x,int y,int new_data)
{
	for(int i=x;i<=n;i+=i&(-i)){
		for(int j=y;j<=n;j+=j&(-j)){
			data[i][j]+=new_data;
		}
	}
	return;
}

inline int SUM(int x,int y)
{
	int Sum=0;
	for(int i=x;i>0;i-=i&(-i)){
		for(int j=y;j>0;j-=j&(-j)){
			Sum+=data[i][j];
		}
	}
	return Sum;
}

int main()
{
	freopen("mobilephones.in","r",stdin);
	freopen("mobilephones.out","w",stdout);
	ml=in();n=in();
	ml=in();
	while(ml!=3){
		if(ml==1){
			x=in();y=in();ml=in();
			x++;y++;
			modify(x,y,ml);
		}
		else{
			x=in();y=in();x1=in();y1=in();
			x++;y++;x1++;y1++;
			printf("%d\n",SUM(x1,y1)-SUM(x-1,y1)-SUM(x1,y-1)+SUM(x-1,y-1));
		}
		ml=in();
	}
	return 0;
}