您的位置:首页 > 其它

HDOJ 2642 Stars

2015-07-29 19:48 513 查看

Stars

Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others)

Total Submission(s): 1333    Accepted Submission(s): 546


[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

 

[align=left]Author[/align]
teddy
 

[align=left]Source[/align]
百万秦关终属楚

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 1010;
int ary

;
bool flag

;

void Init() {
memset(ary, 0, sizeof(ary));
memset(flag, false, sizeof(flag));
}

int lowbit(int x) {
return x & (-x);
}

void update(int x, int y, int val) {
for (int i = x; i > 0; i -= lowbit(i))
for (int j = y; j > 0; j -= lowbit(j))
ary[i][j] += val;
}

int query(int x, int y) {
int sum = 0;

for (int i = x; i < N; i += lowbit(i))
for (int j = y; j < N; j += lowbit(j))
sum += ary[i][j];

return sum;
}

int main() {
int T;

while (~scanf("%d", &T)) {
Init();
while (T--) {
int x, y, x1, y1;
char str[2];

scanf("%s%d%d", str, &x, &y);
x++, y++;

if (str[0] == 'Q') {
x1 = y;
scanf("%d%d", &y, &y1);
y++, y1++;
if (x > x1)
swap(x, x1);
if (y > y1)
swap(y, y1);

int sum = query(x, y) - query(x, y1 + 1) - query(x1 + 1, y) + query(x1 + 1, y1 + 1);

printf("%d\n", sum);
}
else if (str[0] == 'B' && flag[x][y] == false) {
flag[x][y] = true;
update(x, y, 1);
}
else if (str[0] == 'D' && flag[x][y] == true){
flag[x][y] = false;
update(x, y, -1);
}
}
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: