hdu 2642 Stars(二维树状数组)
2013-11-14 11:06
274 查看
Stars
Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/65536 K (Java/Others)Total Submission(s): 886 Accepted Submission(s): 382
[align=left]Problem Description[/align]
Yifenfei is a romantic guy and he likes to count the stars in the sky.
To make the problem easier,we considerate the sky is a two-dimension plane.Sometimes the star will be bright and sometimes the star will be dim.At first,there is no bright star in the sky,then some information will be given as "B x y" where 'B' represent bright
and x represent the X coordinate and y represent the Y coordinate means the star at (x,y) is bright,And the 'D' in "D x y" mean the star at(x,y) is dim.When get a query as "Q X1 X2 Y1 Y2",you should tell Yifenfei how many bright stars there are in the region
correspond X1,X2,Y1,Y2.
There is only one case.
[align=left]Input[/align]
The first line contain a M(M <= 100000), then M line followed.
each line start with a operational character.
if the character is B or D,then two integer X,Y (0 <=X,Y<= 1000)followed.
if the character is Q then four integer X1,X2,Y1,Y2(0 <=X1,X2,Y1,Y2<= 1000) followed.
[align=left]Output[/align]
For each query,output the number of bright stars in one line.
[align=left]Sample Input[/align]
5 B 581 145 B 581 145 Q 0 600 0 200 D 581 145 Q 0 600 0 200
[align=left]Sample Output[/align]
1 0 题意:有许多星星分布在坐标系中,一开始所有星星都是暗的,然后有m个操作:B:x,y 使位于坐标(x,y)的星星发光。D:x,y 使位于坐标(x,y)的星星变暗。Q:x1,x2,y1,y2 计算位于(x1,y1)和(x2,y2)围成的区域内发光的星星的数目 思路:简单二维数组应用。二维数组详解:http://www.java3z.com/cwbwebhome/article/article1/1369.html?id=4804 AC代码:#include <iostream> #include <cstdio> #include <cstring> #include <string> #include <algorithm> #include <queue> #include <stack> #include <vector> #include <map> #include <cmath> #include <cstdlib> #define L(rt) (rt<<1) #define R(rt) (rt<<1|1) #define ll __int64 #define eps 1e-6 using namespace std; const int INF = 1000000000; const int maxn = 1005; int c[maxn][maxn]; bool a[maxn][maxn]; int m; int lowbit(int x) { return x & (- x); } void add(int x, int y, int d) { for(int i = x; i < maxn; i += lowbit(i)) for(int j = y; j < maxn; j += lowbit(j)) c[i][j] += d; } int sum(int x, int y) //求前i行前j列的元素总和 { int ret = 0; for(int i = x; i > 0; i -= lowbit(i)) for(int j = y; j > 0; j -= lowbit(j)) ret += c[i][j]; return ret; } int main() { int x1, y1, x2, y2; char op[3]; while(~scanf("%d", &m)) { memset(a, false, sizeof(a)); memset(c, 0, sizeof(c)); while(m--) { scanf("%s", op); if(op[0] == 'B') { scanf("%d%d", &x1, &y1); x1++; y1++; if(!a[x1][y1]) { add(x1, y1, 1); a[x1][y1] = true; } } else if(op[0] == 'D') { scanf("%d%d", &x1, &y1); x1++; y1++; if(a[x1][y1]) { add(x1, y1, -1); a[x1][y1] = false; } } else { scanf("%d%d%d%d", &x1, &x2, &y1, &y2); x1++; x2++; y1++; y2++; if(x1 > x2) swap(x1, x2); if(y1 > y2) swap(y1, y2); printf("%d\n", sum(x2, y2) - sum(x2, y1 - 1) - sum(x1 - 1, y2) + sum(x1 - 1, y1 -1)); } } } return 0; }
相关文章推荐
- hdu 2642 Stars(二维树状数组)
- HDU 2642 Stars 二维树状数组应用
- hdu 2642 Stars (二维树状数组)
- HDU-2642 Stars 二维树状数组
- HDU 2642 Stars (二维树状数组)
- 【树状数组(二维)】poj 1195 Mobile phones(外:hdu 2642 Stars)
- HDU 2642 Stars (二维树状数组)
- HDU 2642 Stars(二维树状数组)
- HDU-2642-Stars(二维树状数组应用)
- 树状数组(二维)例题 HDU2642——Stars
- hdu 2642 stars (二维树状数组)
- hdu 2642 Stars 二维树状数组水题
- HDOJ 题目2642 Stars(二维树状数组)
- hdoj--2642 Stars(二维树状数组)
- HDU 2642 二维树状数组
- HDU 2642 Stars(二维树状数组 模板题)
- hdu 2642 Stars--二维树状数组的应用
- hdu 2642(比较裸的二维树状数组)
- HDU 2642 stars 二维树状数组
- HDU 2642 Stars [二维树状数组]【数据结构】