poj2155二维树状数组+区间修改单点查询

http://poj.org/problem?id=2155

#include
#include
#include
using namespace std;
typedef long long ll;
const int N = 1e3+300;
const int INF = 0x3f3f3f3f;
const int mod = 998244353;
int a[N][N],n,m;
int lowbit(int k){ return k&-k;}
void add(int x,int y,int v){
    for(int i = x;i <= n;i += lowbit(i)){
        for(int j = y;j <= n;j += lowbit(j)){
            a[i][j] += v;
        }
    }
}
int query(int x,int y){
    int ans = 0;
    for(int i = x;i > 0;i -= lowbit(i)){
        for(int j = y;j > 0;j -=lowbit(j)){
            ans += a[i][j];
        }
    }
    return ans;
}
int main()
{
    //ios::sync_with_stdio(false);
    //cin.tie(0);cout.tie(0);
    int T;
    cin >> T;
    while(T --){
        scanf("%d%d",&n,&m);
        memset(a,0,sizeof(a));
        char s[10];
        while(m --){
            scanf("%s",s);
            if(s[0] == 'C'){
                int xx1,yy1,xx2,yy2;
                scanf("%d%d%d%d",&xx1,&yy1,&xx2,&yy2);
                add(xx1,yy1,1);
                add(xx1,yy2+1,1);
                add(xx2+1,yy1,1);
                add(xx2+1,yy2+1,1);
            }else{
                int x,y;
                scanf("%d%d",&x,&y);
                printf("%d\n",query(x,y)%2);
            }
        }
        if(T) printf("\n");
    }
    return 0;
}

 

你可能感兴趣的:(数据结构-树状数组,POJ)