Description

Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row and j-th column. Initially we have A[i, j] = 0 (1 <= i, j <= N).

We can change the matrix in the following way. Given a rectangle whose upper-left corner is (x1, y1) and lower-right corner is (x2, y2), we change all the elements in the rectangle by using "not" operation (if it is a '0' then change it into '1' otherwise change it into '0'). To maintain the information of the matrix, you are asked to write a program to receive and execute two kinds of instructions.

1. C x1 y1 x2 y2 (1 <= x1 <= x2 <= n, 1 <= y1 <= y2 <= n) changes the matrix by using the rectangle whose upper-left corner is (x1, y1) and lower-right corner is (x2, y2). 
2. Q x y (1 <= x, y <= n) querys A[x, y]. 

Input

The first line of the input is an integer X (X <= 10) representing the number of test cases. The following X blocks each represents a test case.

The first line of each block contains two numbers N and T (2 <= N <= 1000, 1 <= T <= 50000) representing the size of the matrix and the number of the instructions. The following T lines each represents an instruction having the format "Q x y" or "C x1 y1 x2 y2", which has been described above.

Output

For each querying output one line, which has an integer representing A[x, y].

There is a blank line between every two continuous test cases.

Sample Input

  1. 1
  2. 2 10
  3. C 2 1 2 2
  4. Q 2 2
  5. C 2 1 2 1
  6. Q 1 1
  7. C 1 1 2 1
  8. C 1 2 1 2
  9. C 1 1 2 2
  10. Q 1 1
  11. C 1 1 2 1
  12. Q 2 1

Sample Output

  1. 1
  2. 0
  3. 0
  4. 1

Source

POJ Monthly,Lou Tiancheng
【分析】
算是真正明白二维树状数组了。
维护的时候只要更改矩阵的四个端点就行了。呵呵呵..
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstring>
  5. #include <vector>
  6. #include <utility>
  7. #include <iomanip>
  8. #include <string>
  9. #include <cmath>
  10. #include <map>
  11.  
  12. const int MAXN = + ;
  13. const int MAX = + ;
  14. using namespace std;
  15. int n, m;//m为操作次数
  16. int C[MAXN][MAXN];
  17.  
  18. int lowbit(int x){return x&-x;}
  19. /*int sum(int x, int y){
  20. int cnt = 0, tmp;
  21. while (x > 0){
  22. tmp = y;
  23. while (tmp > 0){
  24. cnt += C[x][tmp];
  25. tmp -= lowbit(tmp);
  26. }
  27. x -= lowbit(x);
  28. }
  29. return cnt;
  30. }
  31. void add(int x, int y, int val){
  32. int tmp;
  33. while (x <= 1000){
  34. tmp = y;
  35. while (tmp <= 1000){
  36. C[x][tmp] += val;
  37. tmp += lowbit(tmp);
  38. }
  39. x += lowbit(x);
  40. }
  41. return;
  42. }*/
  43. void add(int x,int y) {
  44. int i,k;
  45. for(i=x; i<=n; i+=lowbit(i))
  46. for(k=y; k<=n; k+=lowbit(k))
  47. C[i][k]++;
  48. }
  49. int sum(int x,int y) {
  50. int i,k,cnt = ;
  51. for(i=x; i>; i-=lowbit(i))
  52. for(k=y; k>; k-=lowbit(k))
  53. cnt += C[i][k];
  54. return cnt;
  55. }
  56.  
  57. void work(){
  58. scanf("%d%d", &n, &m);
  59. for (int i = ; i <= m; i++){
  60. char str[];
  61. scanf("%s", str);
  62. if (str[] == 'Q'){
  63. int x, y;
  64. scanf("%d%d", &x, &y);
  65. //x++;y++;
  66. printf("%d\n", sum(x, y)%);
  67. }else if (str[] == 'C'){
  68. int x1, y1, x2, y2;
  69. scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
  70. x1++;y1++;x2++;y2++;
  71. add(x2, y2);
  72. add(x2, y1 - );
  73. add(x1 - , y2);
  74. add(x1 - , y1 - );
  75. }
  76. }
  77. }
  78.  
  79. int main(){
  80. int T;
  81. #ifdef LOCAL
  82. freopen("data.txt", "r", stdin);
  83. freopen("out.txt", "w", stdout);
  84. #endif
  85. scanf("%d", &T);
  86. while (T--){
  87. memset(C, , sizeof(C));
  88. work();
  89. printf("\n");
  90. }
  91. return ;
  92. }

【POJ2155】【二维树状数组】Matrix的更多相关文章

  1. poj2155二维树状数组

    Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...

  2. POJ2155(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17226   Accepted: 6461 Descripti ...

  3. poj2155二维树状数组区间更新

    垃圾poj又交不上题了,也不知道自己写的对不对 /* 给定一个矩阵,初始化为0:两种操作 第一种把一块子矩阵里的值翻转:0->1,1->0 第二种询问某个单元的值 直接累计单元格被覆盖的次 ...

  4. [poj2155]Matrix(二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 25004   Accepted: 9261 Descripti ...

  5. 【poj2155】Matrix(二维树状数组区间更新+单点查询)

    Description Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the ...

  6. POJ2155 Matrix(二维树状数组||区间修改单点查询)

    Given an N*N matrix A, whose elements are either 0 or 1. A[i, j] means the number in the i-th row an ...

  7. [POJ2155]Matrix(二维树状数组)

    题目:http://poj.org/problem?id=2155 中文题意: 给你一个初始全部为0的n*n矩阵,有如下操作 1.C x1 y1 x2 y2 把矩形(x1,y1,x2,y2)上的数全部 ...

  8. POJ2155/LNSYOJ113 Matrix【二维树状数组+差分】【做题报告】

    这道题是一个二维树状数组,思路十分神奇,其实还是挺水的 题目描述 给定一个N∗NN∗N的矩阵AA,其中矩阵中的元素只有0或者1,其中A[i,j]A[i,j]表示矩阵的第i行和第j列(1≤i,j≤N)( ...

  9. POJ 2155 Matrix (二维树状数组)

    Matrix Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 17224   Accepted: 6460 Descripti ...

随机推荐

  1. 【转】在VMware中安装OS X Yosemite

    原文网址:http://blog.gaohaobo.com/229.html OS X(前称:Mac OS X)操作系统是由苹果公司(Apple Inc.)为其Mac系列产品开发的.基于Unix的专属 ...

  2. HDU --2665

    Kth number Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  3. HDU-2509 Be the Winner

    http://acm.hdu.edu.cn/showproblem.php?pid=2509 Be the Winner Time Limit: 2000/1000 MS (Java/Others)  ...

  4. Two kinds of Quaternion SlerpImp (Unity)

    using UnityEngine;using System.Collections; public class SlerpImp{ static float Dot(Quaternion a, Qu ...

  5. ubuntu14.04 wps字体缺失问题

    字体 下载安装字体即可

  6. UVa 10029 hash + dp

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  7. poj 1218 THE DRUNK JAILER【水题】

    THE DRUNK JAILER Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25124   Accepted: 1576 ...

  8. java对文件拷贝的简单操作

    package fileInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNot ...

  9. xml学习篇(二) ----JSON 和XML对比

    在比较JSON和XML之前,我们先来上一堂关于数据格式的简要历史(更准确的说,是关于XML的始祖): 早在1970年,IBM开发了一种叫Generalized Markup Language的标记语言 ...

  10. spring项目中监听器作用-ContextLoaderListener(转)

    1 spring框架的启动入口 ContextLoaderListener 2 作用:在启动Web 容器时,自动装配Spring applicationContext.xml 的配置信息. 因为它实现 ...