POJ 2155 Matrix
来源:互联网 发布:北大图书馆知乎 编辑:程序博客网 时间:2024/06/06 05:50
二维树状数组,可以快速求一个矩阵内的数字之和,类推三位树状数组,快速求一个长方体内的数字和?
Matrix
Time Limit: 3000MS Memory Limit: 65536KB 64bit IO Format: %I64d & %I64u
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].
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.
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.
There is a blank line between every two continuous test cases.
Sample Input
12 10C 2 1 2 2Q 2 2C 2 1 2 1Q 1 1C 1 1 2 1C 1 2 1 2C 1 1 2 2Q 1 1C 1 1 2 1Q 2 1
Sample Output
1001
Source
POJ Monthly,Lou Tiancheng
Problem descriptions:
System Crawler 2016-05-28 0
Initialization.
#include <stdio.h>#include <iostream>#include<algorithm>#include <string.h>using namespace std;typedef long long LL;#define N 1000int tree[N+5][N+5],n,t;int lowbit(int x) { return x&-x;}void add(int x,int y) { int t=y; while(x<=n) { y=t; while(y<=n) { tree[y][x]^=1; y+=lowbit(y); } x+=lowbit(x); }}int Sum(int x,int y) { int tot=0,t=y; while(x) { y=t; while(y) { tot^=tree[y][x]; y-=lowbit(y); } x-=lowbit(x); } return tot;}int main() { //freopen("input.txt","r",stdin); int T,a,b,c,d; char f; scanf("%d",&T); while(T--) { scanf("%d%d",&n,&t); for(int i=0; i<t; i++) { getchar(); scanf("%c",&f); if(f=='C') { scanf("%d%d%d%d",&a,&b,&c,&d); c++; d++; add(a,b); add(c,b); add(c,d); add(a,d); } else { scanf("%d%d",&a,&b); printf("%d\n",Sum(a,b)); } } printf("\n"); memset(tree,0,sizeof(tree)); } return 0;}
0 0
- poj 2155 Matrix
- poj 2155 Matrix
- poj 2155 Matrix
- Poj 2155 Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- POJ 2155 - Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- Poj 2155 Matrix
- POJ-2155-Matrix
- POJ 2155: Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- poj 2155 Matrix
- POJ 2155 Matrix
- POJ 2155 Matrix
- poj 2155 Matrix
- sql技巧-构造分组条件
- 【黑马Android】(13)Linux操作系统/cron计划任务
- android socket 通信(2)--传文件
- JAVA 数据类型
- Oracle11gR2_RAC_for_redhat6.3 安装手册
- POJ 2155 Matrix
- GitHub网站文件删除
- Android 基础总结:( 十三)AsyncTask
- Java接入Spark之创建RDD的两种方式和操作RDD
- 1055. 集体照 (25)
- J - 卿大爷的两个女友(待续)
- Android从数据库中获取所有的文件
- 福尔摩斯的约会
- 使用spring发布和访问RMI服务