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;
}
相关文章推荐
- 【POJ】1364 King
- POJ 2965 The Pilots Brothers' refrigerator (想法题)
- vs2015安装使用体验
- CFrameWnd的两个函数
- HDOJ 3966 Aragorn's Story
- 快速排序 c++
- hdu 5325 Crazy Bobo (树形dp)
- 关于cassandra vnode的理解-marsyoung.
- 排序算法的稳定性讨论
- 【CodeForces】E. Xenia and Tree(分块 + LCA)
- Trim(),TrimStart(),TrimEnd()用于去除字符串中的特定字符
- 多校第三场 1010 hdu 5325 Crazy Bobo(拓扑排序+树形dp)
- linux防火墙基础和管理设置iptables规则
- java中的并发:线程通信
- 脚本学习之路之----我要熟悉awk, sed, rpm 工具
- 简单明了的明白进程和线程的区别
- 【dp】【bzoj 1079】【SCOI 2008】着色方案
- ExQuilla的使用和破解
- E 接口
- 使用freemarker中的小数点处理的一点心得!