1. 程式人生 > >poj2155二維樹狀陣列區間更新

poj2155二維樹狀陣列區間更新

垃圾poj又交不上題了,也不知道自己寫的對不對

/*
給定一個矩陣,初始化為0:兩種操作
第一種把一塊子矩陣裡的值翻轉:0->1,1->0
第二種詢問某個單元的值
直接累計單元格被覆蓋的次數,如果被覆蓋奇數次就是1,被覆蓋偶數次就是0
樹狀陣列解區間更新。。
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 1005
int bit[maxn][maxn],n,q;
void
add(int x,int y,int num){ for(int i=x;i<=n;i+=i&-i) for(int j=y;j<=n;j+=j&-j) bit[i][j]+=num; } int query(int x,int y){ int res=0; for(int i=x;i;i-=i&-i) for(int j=y;j;j-=j&-j) res+=bit[i][j]; return res; } int main(){
int t,x1,x2,y1,y2; char op[2]; scanf("%d",&t); while(t--){ scanf("%d%d",&n,&q); while(q--){ scanf("%s",&op); if(op[0]=='C'){ scanf("%d%d%d%d",&x1,&y1,&x2,&y2); add(x1,y1,1);add(x1,y2+1,1
); add(x2+1,y1,1);add(x2+1,y2+1,1); } else { scanf("%d%d",&x1,&y1); printf("%d\n",query(x1,y1)%2); } } printf("\n"); } }