poj_1195Mobile phones,二维树状数组

来源:互联网 发布:arm编程 编辑:程序博客网 时间:2024/06/09 18:24
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[1300][1300];int s;int lowbit(int x){    return x&(-x);}void add(int x,int y,int d){   for(int i=x;i<=s;i+=lowbit(i))    for(int j=y;j<=s;j+=lowbit(j))    a[i][j]+=d;}int sum(int x,int y){    int ret=0;    for(int i=x;i>0;i-=lowbit(i))        for(int j=y;j>0;j-=lowbit(j))        ret+=a[i][j];    return ret;}int main(){    while(scanf("%d%d",&s,&s)!=EOF)    {        memset(a,0,sizeof(a));        int n,x,y,d,xt,yt;        while(scanf("%d",&n))        {            if(n==3) break;            if(n==1)            {                scanf("%d%d%d",&x,&y,&d);                x++,y++;                add(x,y,d);            }            if(n==2)            {                scanf("%d%d%d%d",&x,&y,&xt,&yt);                x++,y++,xt++,yt++;                int ans=sum(xt,yt)-sum(xt,y-1)-sum(x-1,yt)+sum(x-1,y-1);                cout<<ans<<endl;            }        }    }    return 0;}

0 0
原创粉丝点击