zoukankan      html  css  js  c++  java
  • POJ2155(二维树状数组)

    Matrix

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

    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
    2 10
    C 2 1 2 2
    Q 2 2
    C 2 1 2 1
    Q 1 1
    C 1 1 2 1
    C 1 2 1 2
    C 1 1 2 2
    Q 1 1
    C 1 1 2 1
    Q 2 1
    

    Sample Output

    1
    0
    0
    1
    

    Source

    POJ Monthly,Lou Tiancheng
     
    题意:给出矩阵左上角和右下角坐标,矩阵里的元素 1变0 ,0 变1,然后给出询问,问某个点是多少
    思路:二维树状数组
     1 //2017-10-25
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <iostream>
     5 #include <algorithm>
     6 
     7 using namespace std;
     8 
     9 const int N = 1100;
    10 
    11 int bt[N][N], n, q;
    12 
    13 int lowbit(int x){
    14     return x&(-x);
    15 }
    16 
    17 void add(int x, int y, int v){
    18     while(x <= n){
    19         int j = y;
    20         while(j <= n){
    21             bt[x][j] += v;
    22             j += lowbit(j);
    23         }
    24         x += lowbit(x);
    25     }
    26 }
    27 
    28 int sum(int x, int y){
    29     int sm = 0;
    30     while(x > 0){
    31         int j = y;
    32         while(j > 0){
    33             sm += bt[x][j];
    34             j -= lowbit(j);
    35         }
    36         x -= lowbit(x);
    37     }
    38     return sm;
    39 }
    40 
    41 int main()
    42 {
    43     int T;
    44     cin>>T;
    45     while(T--){
    46         scanf("%d%d", &n, &q);
    47         memset(bt, 0, sizeof(bt));
    48         char op;
    49         int x, y, x1, y1;
    50         while(q--){
    51             getchar();
    52             scanf("%c%d%d", &op, &x, &y);
    53             if(op == 'C'){
    54                 scanf("%d%d", &x1, &y1);
    55                 add(x, y, 1);
    56                 add(x, y1+1, -1);
    57                 add(x1+1, y, -1);
    58                 add(x1+1, y1+1, 1);
    59             }else{
    60                 printf("%d
    ", sum(x, y)%2);
    61             }
    62         }if(T)printf("
    ");
    63     }
    64 
    65     return 0;
    66 }
  • 相关阅读:
    window在文件管理器中打开命令行窗口
    js的事件机制
    ext-css
    HTML防止input回车提交表单
    myeclipse调试代码的时候看不到变量的值和jdk源码重新编译
    MANIFEST.MF 文件内容完全详解
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'dll.msvcrt'
    JNA知识点
    cookie 和session 的区别
    6- js监听输入框值的即时变化onpropertychange、oninput
  • 原文地址:https://www.cnblogs.com/Penn000/p/7732534.html
Copyright © 2011-2022 走看看