记录编号 |
126532 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[IOI 2001] 移动电话 |
最终得分 |
100 |
用户昵称 |
JSX |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.213 s |
提交时间 |
2014-10-13 17:07:58 |
内存使用 |
4.30 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
using namespace std;
int S=0,Case=0,x=0,y=0,A=0;
int T[1025][1025]={0};
inline int Lowbit(int x){
return x&(-x);
}
inline void Insert(int x,int y,int v){
for(int i=x;i<=S;i+=Lowbit(i)){
for(int j=y;j<=S;j+=Lowbit(j)){
T[i][j]+=v;
}
}
}
inline int Sum(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+=T[i][j];
}
}
return Ans;
}
int main(){
freopen("mobilephones.in","r",stdin);
freopen("mobilephones.out","w",stdout);
while(scanf("%d",&Case)==1){
if(Case==0){
scanf("%d",&S);
continue;
memset(T,0,sizeof(T));
}
else{
if(Case==1){
scanf("%d%d%d",&x,&y,&A);
x++; y++;
Insert(x,y,A);
}
else{
if(Case==2){
int x1=0,y1=0,x2=0,y2=0;
scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
printf("%d\n",Sum(x2+1,y2+1)+Sum(x1,y1)-Sum(x1,y2+1)-Sum(x2+1,y1));
}
else{
if(Case==3) break;
}
}
}
}
return 0;
}