POJ2155(二维树状数组)

题目:Matrix

 

本题是赤裸裸的二维树状数组,意思很明白。。。。

#include 
#include 

const int N = 1005;

int C[N][N];

int Lowbit(int x)
{
    return x & (-x);
}

void Update(int x,int y,int value)
{
    int i, j;
    for(i=x;i<=N;i+=Lowbit(i))
    {
        for(j=y;j<=N;j+=Lowbit(j))
        {
            C[i][j]^=value;
        }
    }
}

int GetSum(int x,int y)
{
    int sum=0,i,j;
    for(i=x;i>0;i-=Lowbit(i))
    {
        for(j=y;j>0;j-=Lowbit(j))
        {
            sum^=C[i][j];
        }
    }
    return sum;
}

int main()
{
    int t;
    char ch;
    int N, T;
    scanf("%d",&t);
    while(t--)
    {
        memset(C,0,sizeof(C));
        scanf("%d%d",&N,&T);
        while(T--)
        {
            getchar();
            scanf("%c",&ch);
            if(ch=='C')
            {
                int x1,y1,x2,y2;
                scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                Update(x2,y2,1);
                Update(x2,y1-1,1);
                Update(x1-1,y2,1);
                Update(x1-1,y1-1,1);
            }
            else
            {
                int x, y;
                scanf("%d%d",&x,&y);
                printf("%d\n",GetSum(x,y)%2);
            }
        }
        if(t) puts("");
    }
    return 0;
}

你可能感兴趣的:(数据结构)