记录编号 |
409630 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[IOI 2001] 移动电话 |
最终得分 |
100 |
用户昵称 |
Emine |
是否通过 |
通过 |
代码语言 |
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);
}
}
}