比赛 测试 评测结果 AAAAAAAAAA
题目名称 移动电话 最终得分 100
用户昵称 YGOI_真神名曰驴蛋蛋 运行时间 0.177 s
代码语言 C++ 内存使用 4.30 MiB
提交时间 2017-04-11 20:36:36
显示代码纯文本
#include <cstdio>
const int MAXN=1025;
int len;
struct FFT{
	int w[MAXN];
	void add(int pos,int x)
		{while(pos<=len){w[pos]+=x;pos+=pos&-pos;}}
	int query(int pos)
		{int ans=0;while(pos>0){ans+=w[pos];pos-=pos&-pos;}return ans;	}
};
struct DFT{
	FFT w[MAXN];
	void add(int a,int b,int x)
		{while(a<=len){w[a].add(b,x);a+=a&-a;}}
	int query(int a,int b)
		{int ans=0;while(a>0){ans+=w[a].query(b);a-=a&-a;}return ans;}
}FT;
int query(int x1,int y1,int x2,int y2)
	{return FT.query(x2,y2)-FT.query(x1-1,y2)-FT.query(x2,y1-1)+FT.query(x1-1,y1-1);}
void add(int x1,int y1,int p)
	{FT.add(x1,y1,p);}
int main(){
	freopen("mobilephones.in","r",stdin);
	freopen("mobilephones.out","w",stdout);
	scanf("%*d%d",&len);
	int m,p,x1,x2,y1,y2;
	while(scanf("%d",&m)){
		if(m==1){
			scanf("%d%d%d",&x1,&y1,&p);
			add(x1+1,y1+1,p);
		}else if(m==2){
			scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
			printf("%d\n",query(x1+1,y1+1,x2+1,y2+1));
		}else break;
	}fclose(stdin);fclose(stdout);
///	while(true);
	return 0;
}