记录编号 |
572036 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[IOI 2001] 移动电话 |
最终得分 |
100 |
用户昵称 |
┭┮﹏┭┮ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.648 s |
提交时间 |
2022-06-27 15:33:31 |
内存使用 |
6.90 MiB |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 1040;
long long s;
int n,z,x,y,l,u;
int a[N][N];
int lowbit(int x){
return x & (-x);
}
void add(int x,int y,int l){
for(int i = x;i <= n;i+=lowbit(i)){
for(int j = y;j <= n;j+=lowbit(j)){
a[i][j] += l;
}
}
}
long long sou(int x,int y){
long long s = 0;
for(int i = x;i > 0;i-=lowbit(i)){
for(int j = y;j > 0;j-=lowbit(j)){
s += a[i][j];
}
}
return s;
}
int main(){
freopen("mobilephones.in","r",stdin);
freopen("mobilephones.out","w",stdout);
while((cin>>z) && z != 3){
if(z == 0)cin>>n;
else if(z == 1){
cin>>x>>y>>l;
add(x+1,y+1,l);
}
else if(z == 2){
cin>>u>>x>>y>>l;
cout<<(sou(y+1,l+1)+sou(u,x)-sou(y+1,x)-sou(u,l+1))<<endl;
}
}
return 0;
}