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