比赛 EYOI暨SBOI暑假快乐赛3rd 评测结果 AAAAAAAAAA
题目名称 移动电话 最终得分 100
用户昵称 该账号已注销 运行时间 0.562 s
代码语言 C++ 内存使用 15.35 MiB
提交时间 2022-06-27 10:04:57
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int a,n,c[2060][2060]={0};
int lb(int x)
{
    return x&-x;
}
int add(int x,int y,int w)
{
    for(int i=x;i<=n;i+=lb(i))
    {
        for(int j=y;j<=n;j+=lb(j))
        {
            c[i][j]+=w;
        }
    }
    return 0;
}
int Sum(int x,int y)
{
    int sum=0;
    for(int i=x;i>0;i-=lb(i))
    {
        for(int j=y;j>0;j-=lb(j))
        {
            sum+=c[i][j];
        }
    }
    return sum;
}
int query(int x,int y,int z,int w)
{
    return (Sum(z,w)+Sum(x-1,y-1)-Sum(x-1,w)-Sum(z,y-1));
}
int main(){
    freopen("mobilephones.in","r",stdin);
    freopen("mobilephones.out","w",stdout);
    cin>>a>>n;
    while(cin>>a)
    {
        if(a==3)return 0;
        if(a==1)
        {
            int x,y,z;
            cin>>x>>y>>z;
            add(x+1,y+1,z);
        }
        if(a==2)
        {
            int x,y,z,w,ans=0;
            cin>>x>>y>>z>>w;
            cout<<query(x+1,y+1,z+1,w+1)<<endl;
        }
    }
    return 0;
}