VJ Mobile phones (二维树状数组)

主要涉及二维树状数组查询和修改
直接看代码:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int c[1200][1200],n;
int ask(int x,int y)//
{
    int ans=0;
   for(int i=x;i>=1;i-=i&-i)
    for(int j=y;j>=1;j-=j&-j)
        ans+=c[i][j];
   return ans;
}
void add(int x,int y,int z)
{
    for(int i=x;i<=n;i+=i&-i)
        for(int j=y;j<=n;j+=j&-j)
        c[i][j]+=z;
}
int main()
{
    int T;
    while(cin>>T)
    {
       if(T==0)
        cin>>n;
       else if(T==1)
       {
         int x,y,val;
         scanf("%d%d%d",&x,&y,&val);
         x++,y++;
         add(x,y,val);
       }
       else if(T==2)
       {
          int l,b,r,t;
          scanf("%d%d%d%d",&l,&b,&r,&t);
          l++,b++,r++,t++;
          cout<<ask(r,t)-ask(l-1,t)-ask(r,b-1)+ask(l-1,b-1)<<endl;//二维前缀和
       }
       else
       {
          memset(c,0,sizeof(c));
          break;
       }
    }
return 0;
}
posted @ 2020-03-04 11:23  Pecoz  阅读(118)  评论(0编辑  收藏  举报