poj 1195 Mobile phones(二维数组)

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;

int c[1048][1048],n;
int lowbit[1048];

void add(int x,int y,int d)
{
    int i,j;
    for(i=x;i<=n;i+=lowbit[i])
        for(j=y;j<=n;j+=lowbit[j])
    {
        c[i][j]+=d;
    }
}

int sum(int x,int y)
{
    int ret=0,i,j;
    for(i=x;i>0;i-=lowbit[i])
        for(j=y;j>0;j-=lowbit[j])
        {
            ret+=c[i][j];
        }
    return ret;
}

int main()
{
    int cmd,i,j,x,y,d,r,l,b,t;
    for(i=1;i<=1024+5;i++)
        lowbit[i]=i&(-i);
    while(~scanf("%d",&cmd))
    {
        if(cmd==0)
        {
            scanf("%d",&n);
            memset(c,0,sizeof(c));
        }
        else if(cmd==1)
        {
            scanf("%d%d%d",&x,&y,&d);
            add(x+1,y+1,d);
        }
        else if(cmd==2)
        {
            scanf("%d%d%d%d",&l,&b,&r,&t);
            int ans=sum(r+1,t+1)+sum(l,b)-sum(r+1,b)-sum(l,t+1);
            printf("%d\n",ans);
        }
        else  if(cmd==3) return 0;
    }
    return 0;
}

你可能感兴趣的:(poj 1195 Mobile phones(二维数组))