POJ-1656 Counting Black (二维树状数组)
2013-05-21 22:54
393 查看
Counting Black
Description
There is a board with 100 * 100 grids as shown below. The left-top gird is denoted as (1, 1) and the right-bottom grid is (100, 100).
We may apply three commands to
the board:
In
the beginning, all the grids on the board are white. We apply a series of
commands to the board. Your task is to write a program to give the numbers of
black grids within a required region when a TEST command is applied.
Input
The first line of the input is an integer t (1 <= t
<= 100), representing the number of commands. In each of the following lines,
there is a command. Assume all the commands are legal which means that they
won't try to paint/test the grids outside the board.
Output
For each TEST command, print a line with the number of
black grids in the required region.
Sample Input
Sample Output
Source
POJ Monthly--2004.05.15 Liu Rujia@POJ
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 9655 | Accepted: 6225 |
There is a board with 100 * 100 grids as shown below. The left-top gird is denoted as (1, 1) and the right-bottom grid is (100, 100).
We may apply three commands to
the board:
1. WHITE x, y, L // Paint a white square on the board, // the square is defined by left-top grid (x, y) // and right-bottom grid (x+L-1, y+L-1) 2. BLACK x, y, L // Paint a black square on the board, // the square is defined by left-top grid (x, y) // and right-bottom grid (x+L-1, y+L-1) 3. TEST x, y, L // Ask for the number of black grids // in the square (x, y)- (x+L-1, y+L-1)
In
the beginning, all the grids on the board are white. We apply a series of
commands to the board. Your task is to write a program to give the numbers of
black grids within a required region when a TEST command is applied.
Input
The first line of the input is an integer t (1 <= t
<= 100), representing the number of commands. In each of the following lines,
there is a command. Assume all the commands are legal which means that they
won't try to paint/test the grids outside the board.
Output
For each TEST command, print a line with the number of
black grids in the required region.
Sample Input
5 BLACK 1 1 2 BLACK 2 2 2 TEST 1 1 3 WHITE 2 1 1 TEST 1 1 3
Sample Output
7 6
Source
POJ Monthly--2004.05.15 Liu Rujia@POJ
#include <cstdio> #include <cstring> #include <iostream> using namespace std; int a[105][105]; int col[105][105]; int lowbit(int i) { return i & (-i); } void add(int x, int y, int color) { if(col[x][y] == color) return; col[x][y] = color; for(int i = x; i < 105; i += lowbit(i)) for(int j = y; j < 105; j += lowbit(j)) a[i][j] += color; } int getSum(int x, int y) { int ans = 0; for(int i = x; i > 0; i -= lowbit(i)) for(int j = y; j > 0; j -= lowbit(j)) ans += a[i][j]; return ans; } int main() { int T, x, y, len; char cmd[10]; scanf("%d", &T); memset(a, 0, sizeof(a)); memset(col, -1, sizeof(col)); while(T--) { scanf("%s%d%d%d", cmd, &x, &y, &len); if(cmd[0] == 'B') { for(int i = x; i < x+len; ++i) for(int j = y; j < y+len; ++j) add(i, j, 1); } else if(cmd[0] == 'W') { for(int i = x; i < x+len; ++i) for(int j = y; j < y+len; ++j) add(i, j, -1); } else { printf("%d\n", getSum(x+len-1,y+len-1) + getSum(x-1,y-1) - getSum(x-1,y+len-1) - getSum(x+len-1,y-1)); } } return 0; }
相关文章推荐
- POJ 1656 二维树状数组
- POJ 1195 Mobile phones(二维树状数组)
- poj 1195 Mobile phones(二维树状数组)
- POJ 2155 Matrix (二维树状数组)
- poj 1195 Mobile phones 二维树状数组
- POJ 1195 Mobile phones(二维树状数组)
- poj 2155 Matrix(二维树状数组)(经典)
- POJ 2155 Matrix (二维树状数组+经典题)
- POJ 2029 Get Many Persimmon Trees(二维树状数组)
- poj 2155 Matrix (二维树状数组)
- POJ 1195 Mobile phones (二维树状数组)
- poj&nbsp;2155&nbsp;Matrix&nbsp;(二维树状数组)
- [poj 2155] Matrix(二维树状数组)
- POJ - 1195 Mobile phones解题报告(二维树状数组)
- POJ 1195--Mobile phones (二维树状数组)
- POJ 2155 Matrix(二维树状数组模板)
- poj 2155(二维树状数组)
- POJ 1195 Mobile phones (二维树状数组)
- POJ 1656 二维树状数组简单应用
- POJ 2155 Matrix(二维树状数组)