博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU-2642 Stars 二维树状数组
阅读量:6540 次
发布时间:2019-06-24

本文共 1947 字,大约阅读时间需要 6 分钟。

裸二维树状数组,题义就是求一块面积内处于发亮状态的星星的个数。

代码如下:

#include 
#include
#include
#include
#include
#define MAXN 1005 using namespace std; int c[MAXN+5][MAXN+5], N; bool B[MAXN][MAXN]; inline int lowbit(int x) {
return x & -x; } inline void modify(int posx, int posy, int val) {
for (int i = posx; i <= MAXN; i += lowbit(i)) {
for (int j = posy; j <= MAXN; j += lowbit(j)) c[i][j] += val; } } inline int getsum(int posx, int posy) {
int s = 0; for (int i = posx; i > 0; i -= lowbit(i)) {
for (int j = posy; j > 0; j -= lowbit(j)) s += c[i][j]; } return s; } inline void swap(int &a, int &b) {
int t = a; a = b; b = t; } inline int deal(int x1, int y1, int x2, int y2) {
if (x1 > x2) swap(x1, x2); if (y1 > y2) swap(y1, y2); return getsum(x2, y2) - getsum(x1-1, y2) - getsum(x2, y1-1) + getsum(x1-1, y1-1); } int main() { char op[5]; int x, y, a, b; while (scanf("%d", &N) == 1) {
memset(c, 0, sizeof (c)); memset(B, 0, sizeof (B)); for (int i = 1; i <= N; ++i) {
scanf("%s", op); if (op[0] == 'B') {
scanf("%d %d", &x, &y); x++, y++; if (!B[x][y]) {
B[x][y] = true; modify(x, y, 1); } } else if (op[0] == 'D') {
scanf("%d %d", &x, &y); x++, y++; if (B[x][y]) {
B[x][y] = false; modify(x, y, -1); } } else {
scanf("%d %d %d %d", &a, &x, &b, &y); x++, y++, a++, b++; printf("%d\n", deal(a, b, x, y)); } } } return 0; }

转载于:https://www.cnblogs.com/Lyush/archive/2012/02/26/2368569.html

你可能感兴趣的文章
wcf客户端终结点样本集合
查看>>
【Win 10 应用开发】RTM版的UAP项目解剖
查看>>
Java递归算法——阶乘
查看>>
ios开发应用内实现多语言自由切换
查看>>
转:iOS基于MVC的项目重构总结
查看>>
Tire树
查看>>
Multi-voltage和power gating的实现
查看>>
JavaScript面向对象 ~ 原型和继承(1)
查看>>
ubuntu下安装nginx时依赖库zlib,pcre,openssl安装方法
查看>>
spring cloud微服务分布式云架构--hystrix的使用
查看>>
linux tail
查看>>
解决Mac启动Eclipse Memory Analyzer报错问题
查看>>
jquery的$().each,$.each的区别
查看>>
mysql 缓存开启及测试
查看>>
自己写的进度条###
查看>>
windows磁盘扩容(动态磁盘)
查看>>
在jsp页面中添加富文本编译器(ueditor)+ 图片上传功能
查看>>
fedora12下安装oracle11客户端
查看>>
实现批量添加20个用户,用户名为user1-50,密码为user后面跟5个随机字符
查看>>
LVM磁盘管理
查看>>