记录编号 |
265195 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[IOI 2001] 移动电话 |
最终得分 |
100 |
用户昵称 |
Janis |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.587 s |
提交时间 |
2016-06-01 20:40:03 |
内存使用 |
7.16 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
#define COGS
using namespace std;
const int maxn=1025;
int s,a,x,y,l,b,r,t;
int c[maxn][maxn];
int lowbit(int x){return x&(-x);}
void Add(int x,int y,int t){
for(int i=x;i<=s;i+=lowbit(i))
for(int j=y;j<=s;j+=lowbit(j))c[i][j]+=t;
}
int GetSum(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 Out(int l,int b,int r,int t){
return GetSum(r,t)-GetSum(r,b-1)-GetSum(l-1,t)+GetSum(l-1,b-1);
}
void Init(){
cin>>a>>s;
while(cin>>a && a!=3){
if(a==1){
cin>>x>>y>>t;
Add(x+1,y+1,t);
continue;
}
if(a==2){
cin>>l>>b>>r>>t;
cout<<Out(l+1,b+1,r+1,t+1)<<endl;
continue;
}
}
}
int main()
{
ios::sync_with_stdio(false);
#ifdef COGS
freopen("mobilephones.in","r",stdin);
freopen("mobilephones.out","w",stdout);
#endif
Init();
return 0;//先提个注意点,由于Lowbit(0) = 0,这会导致x递增的那条路径发生死循环,所
//有当树状数组中可能出现0时,我们都全部加一,这样可以避免0带来的麻烦~~
}