您的位置:首页 > 其它

poj 2155 Matrix (二维树状数组)

2013-04-23 09:25 176 查看
这道我没什么想说的,看解题报告的

//4456K
485MS

#include <stdio.h>

#include <string.h>

#define lowbit(x) (x&(-x))

#define M 1050

int ar[M][M];

int n;

void updata (int i,int j)

{

int
tmp;

while (i
> 0)

{

tmp = j;

while (tmp > 0)

{

ar[i][tmp] ^= 1;

tmp -= lowbit(tmp);

}

i -= lowbit(i);

}

}

int query (int i,int j)

{

int ans =
0;

int
tmp;

while (i
<= n)

{

tmp = j;

while (tmp <= n)

{

ans ^= ar[i][tmp];

tmp += lowbit(tmp);

}

i += lowbit(i);

}

return
ans;

}

int main ()

{

int
t,m,x1,y1,x2,y2;

char
op;

scanf
("%d",&t);

while (t
--)

{

memset (ar,0,sizeof(ar));

scanf ("%d%d",&n,&m);

while (m --)

{

getchar ();

scanf("%c",&op);

if (op == 'C')

{

scanf
("%d%d%d%d",&x1,&y1,&x2,&y2);

updata (x2,y2);

updata (x1-1,y2);

updata (x2,y1-1);

updata (x1-1,y1 -1);

}

else

{

scanf ("%d%d",&x1,&y1);

printf ("%d\n",query(x1,y1));

}

}

printf ("\n");

}

return
0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: