记录编号 232786 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 Gravatar哒哒哒哒哒! 是否通过 通过
代码语言 C++ 运行时间 0.122 s
提交时间 2016-03-03 09:44:34 内存使用 4.32 MiB
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<queue>
#include<cstring>

using namespace std;

int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch>'9' || ch<'0'){
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(ch<='9' && ch>='0'){
		x=x*10+ch-48;
		ch=getchar();
	}
	return x*f;
}

int N,c[1025][1025];
int lowbit(int x){return x&-x;}

void Re(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 query(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 find(int l,int b,int r,int t)
{
	return query(r,t)-query(r,b-1)-query(l-1,t)+query(l-1,b-1);	
}

int main()
{
	freopen("mobilephones.in","r",stdin);
	freopen("mobilephones.out","w",stdout);
	int r;
	while(1){
		r=read();
		if(r==0){
			N=read();
		}
		else if(r==1){
			int x=read(),y=read(),z=read();
			Re(x+1,y+1,z);
		}
		else if(r==2){
			int l=read(),b=read(),r=read(),t=read();
			printf("%d\n",find(l+1,b+1,r+1,t+1));
		}
		else break;
	}
}