记录编号 446528 评测结果 AAAAAAAAAA
题目名称 [IOI 2001] 移动电话 最终得分 100
用户昵称 GravatarFFF团 是否通过 通过
代码语言 C++ 运行时间 0.151 s
提交时间 2017-09-08 15:30:07 内存使用 8.41 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
using namespace std;
const int maxn=1030;
const int maxm=1030;
struct BIT2{
	int a[maxn][maxm],bit[maxn][maxm],n,m;
	int lowbit(int x){return x&(-x);}
	void add(int x,int y,int p){
		a[x][y]+=p;
		for(int i=x;i<=n;i+=lowbit(i))
		for(int j=y;j<=m;j+=lowbit(j))
		bit[i][j]+=p;
	}
	void change(int x,int y,int p){
		p=p-a[x][y];
		add(x,y,p);
	}
	int sum(int x,int y){
		int res=0;
		for(int i=x;i>0;i-=lowbit(i))
		for(int j=y;j>0;j-=lowbit(j))
		res+=bit[i][j];
		return res;
	}
	int query(int x1,int y1,int x2,int y2){return sum(x2,y2)-sum(x2,y1-1)-sum(x1-1,y2)+sum(x1-1,y1-1);}
};
BIT2 bit;
int in(int &x){
	int c=getchar(),f=1;x=0;
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<3)+(x<<1)+(c^48);
		c=getchar();
	}
	x*=f;
	if(x==3)return 0;
	return 1;
}
int t,t1,t2,t3,t4;
int main(){
	freopen("mobilephones.in","r",stdin);
	freopen("mobilephones.out","w",stdout);
	in(t);
	in(bit.n);bit.m=bit.n;
	while(in(t)){
		if(t==1){
			in(t1);in(t2);in(t3);
			bit.add(++t1,++t2,t3);
		}
		if(t==2){
			in(t1);in(t2);in(t3);in(t4);
			printf("%d\n",bit.query(++t1,++t2,++t3,++t4));
		}
	}
	return 0;
}