二维树状数组

来源:互联网 发布:网络五大鬼畜歌曲视频 编辑:程序博客网 时间:2024/06/14 06:54
#include <iostream>#include <cstdio>using namespace std;const int maxn = 1005;const int mod = 1000000000 + 7;int BIT2[maxn][maxn]; int n,m;int lowbit(int x){    return x&(-x);}void add(int x, int y, int val){    for(int i = x; i <= n; i += lowbit(i))    {        for(int j = y; j <= n; j += lowbit(j))        {            BIT2[i][j] = (BIT2[i][j]+val)%mod;        }    }}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 = (ret+BIT2[i][j])%mod;        }    }    return ret;}int main(){    scanf("%d %d",&n,&m);    char op[100];    while(m--)    {        scanf("%s",op);        if(op[0] == 'A')        {            int x,y,value;            scanf("%d %d %d",&x,&y,&value);            add(x+1,y+1,value);        }        else if(op[0] == 'S')        {            int x1,x2,y1,y2;            scanf("%d %d %d %d",&x1,&y1,&x2,&y2);            printf("%d\n",(sum(x2+1, y2+1) - sum(x1, y2+1) -sum(x2+1, y1)+ sum(x1, y1))%mod);        }    }    return 0;}