二维树状数组

来源:互联网 发布:mysql 获取字符串下标 编辑:程序博客网 时间:2024/06/07 04:58
#include <cstdio>#include <cstring>using namespace std;int s[1050][1050],n;int lowbit(int x){    return (x& -x);}void insert(int x,int y,int m){    int i,j;    for (i=x;i<=n;i+=lowbit(i))    for (j=y;j<=n;j+=lowbit(j))    s[i][j]+=m;}int getsum(int x,int y){    int i,j,ans=0;    for (i=x;i>0;i-=lowbit(i))    for (j=y;j>0;j-=lowbit(j))    ans+=s[i][j];    return ans;}int get(int x1,int y1,int x2,int y2){    return (getsum(x2,y2)+getsum(x1-1,y1-1)-getsum(x1-1,y2)-getsum(x2,y1-1));}int main(){ int T,i,j,m,q,x,y,k,x1,x2,y1,y2;char ss[10]; while (scanf("%d",&T)!=EOF) {     scanf("%d",&n);     memset(s,0,sizeof(s));     while (scanf("%d",&T)==1 && T!=3)     {         if (T==1)         {             scanf("%d%d%d",&x,&y,&k);             insert(x+1,y+1,k);//+1是因为题里面有0         } else         if (T==2)         {             scanf("%d%d%d%d",&x1,&y1,&x2,&y2);             printf("%d\n",get(x1+1,y1+1,x2+1,y2+1));         }     } } return 0;}
0 0
原创粉丝点击