http://acm.hdu.edu.cn/showproblem.php?pid=2642

题目大意:一个星空,二维的.上面有1000*1000的格点,每个格点上有星星在闪烁.一开始时星星全部暗淡着,有Q个操作:

B x y 点亮一盏星星

D x y 熄灭一盏星星

Q fx tx fy ty 查询这个矩形里面亮着的星星的个数.

题解:首先,注意输入的x,y可能是(0,0),这样一来,用树状数组就不好维护了,所以将之平移一个单位,每当读入一对坐标,要进行x++,y++..

其次,输入的查询,矩形的fx,tx大小未定,所以用:if(fx>tx)swap(fx,tx);进行判断一下

最后,星星点亮了可能还会再次点亮,所以需要加上一个状态数组进行判断.

#include<iostream>
#include<math.h>
#include<algorithm>
#include<stdlib.h>
#include<time.h>
using namespace std;
#define ll long long
#define re(i,n) for(int i=0;i<n;i++)
const int maxn = 1007;
int a[maxn][maxn];
bool sta[maxn][maxn];
int lowbit(int x){
	return x&-x;
}
void update(int x, int y, int d){
	for (int i = x; i < maxn; i+=lowbit(i)){
		for (int j = y; j < maxn; j+=lowbit(j)){
			a[i][j] += d;
		}
	}
}
int query(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(){
	freopen("in.txt", "r", stdin);
	int q; cin >> q;
	memset(a, 0, sizeof(a)), memset(sta, 0, sizeof(sta));
	while (q--){
		char op[2]; scanf("%s", op);
		if (op[0] == 'Q'){
			int fx, fy, tx, ty; scanf("%d%d%d%d", &fx, &tx, &fy, &ty);
			fx++, fy++, tx++, ty++;
			if (fx>tx)swap(fx, tx); if (fy > ty)swap(fy, ty);
			fx--, fy--;
			int ans = query(tx, ty) + query(fx, fy) - query(tx, fy) - query(fx, ty);
			printf("%d\n", ans);
		}
		else{
			int x, y; scanf("%d%d", &x, &y); x++, y++;
			if (op[0] == 'B'){
				if (sta[x][y])continue;
				update(x, y, 1), sta[x][y] = 1;
			}
			else{
				if (sta[x][y] == false)continue;
				update(x, y, -1), sta[x][y] = 0;
			}
		}
	}
	return 0;
}

hdu2642二维树状数组单点更新+区间查询的更多相关文章

  1. hdu 2642二维树状数组 单点更新区间查询 模板题

    二维树状数组 单点更新区间查询 模板 从零开始借鉴http://www.2cto.com/kf/201307/227488.html #include<stdio.h> #include& ...

  2. TZOJ 2725 See you~(二维树状数组单点更新区间查询)

    描述 Now I am leaving hust acm. In the past two and half years, I learned so many knowledge about Algo ...

  3. hdu 2642 二维树状数组 单点更新区间查询 模板水题

    Stars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/65536 K (Java/Others) Total Subm ...

  4. hdu2642二维树状数组单点更新

    碰到这种题一定要注意坐标是不是有序的,也要注意坐标是不是有0的,有的话需要+1处理 #include<bits/stdc++.h> using namespace std; #define ...

  5. 【2018年全国多校算法寒假训练营练习比赛(第五场)-E】情人节的电灯泡(二维树状数组单点更新+区间查询)

    试题链接:https://www.nowcoder.com/acm/contest/77/E 题目描述 情人节到了,小芳和小明手牵手,打算过一个完美的情人节,但是小刚偏偏也来了,当了一个明晃晃的电灯泡 ...

  6. SPOJ - MATSUM 二维树状数组单点更新

    忘记了单点更新时要在树状数组中减去原值..wa了一发 /* 矩形求和,单点更改 */ #include<iostream> #include<cstring> #include ...

  7. 牛客网 暑期ACM多校训练营(第二场)J.farm-STL(vector)+二维树状数组区间更新、单点查询 or 大暴力?

    开心.jpg J.farm 先解释一下题意,题意就是一个n*m的矩形区域,每个点代表一个植物,然后不同的植物对应不同的适合的肥料k,如果植物被撒上不适合的肥料就会死掉.然后题目将每个点适合的肥料种类( ...

  8. 【bzoj3132】上帝造题的七分钟 二维树状数组区间修改区间查询

    题目描述 “第一分钟,X说,要有矩阵,于是便有了一个里面写满了0的n×m矩阵. 第二分钟,L说,要能修改,于是便有了将左上角为(a,b),右下角为(c,d)的一个矩形区域内的全部数字加上一个值的操作. ...

  9. 【bzoj5173】[Jsoi2014]矩形并 扫描线+二维树状数组区间修改区间查询

    题目描述 JYY有N个平面坐标系中的矩形.每一个矩形的底边都平行于X轴,侧边平行于Y轴.第i个矩形的左下角坐标为(Xi,Yi),底边长为Ai,侧边长为Bi.现在JYY打算从这N个矩形中,随机选出两个不 ...

随机推荐

  1. x01.Lab.OpenCV: 计算机视觉

    横看成岭侧成峰,计算视觉大不同.观看的角度不同,成像自然不同,这对计算机视觉来说,是个大麻烦.但计算机视觉应用如此广泛,却又有不得不研究的理由.指纹机大家都用过吧,这不过是冰山之一角.产品检测,机器人 ...

  2. .NET导入导出Excel

    若是开发后台系统,ASP.NET MVC中总是涉及了很多导入导出Excel的问题,有的时候处理起来比较烦 如果能使用以下代码解决,就完美了 public class ReportModel { [Ex ...

  3. monkeyrunner之夜神模拟器的安装与使用(二)

    在上一篇文章-安卓开发环境搭建中,我们创建并启动了eclipse自带的安卓模拟器,该模拟器不仅启动慢,而且在使用过程中的反应速度也是出奇的差,经常出现卡机现象.为了解决这种现象,因此,我们又寻找到了更 ...

  4. html5新增及删除标签

    一.新增标签 有一种划分为,功能性标签[html5新增,如canvas,旧浏览器没有]和语义性标签[如header等只是增强语义,没有新功能].下面按照分几个小类来说. 1.结构标签 新增的结构标签, ...

  5. 退役了退役了-AJAX

    hi 昨晚打球悲剧的把脚崴了. 要知道,上一次崴脚是四年前:那一次伤的是左脚,也是我这么多年打篮球的生涯中,这么多次崴脚中,最严重的一次受伤.休息了整整一个月,受寝室兄弟们的无微不至的照顾,最后也买了 ...

  6. HDU 4578 Transformation --线段树,好题

    题意: 给一个序列,初始全为0,然后有4种操作: 1. 给区间[L,R]所有值+c 2.给区间[L,R]所有值乘c 3.设置区间[L,R]所有值为c 4.查询[L,R]的p次方和(1<=p< ...

  7. 这几天研究DotNetOpenAuth4.2源码发现的坑

    第一,DLL都是签名的,要放到GAC里,如果想去掉强签 名,在VS属性->签名里 取消勾选,没有用,原来是有一个全局的文件在tools/DotNetOpenAuth.props ,里面SignA ...

  8. MysqlHelper 需要重写

    using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Text;u ...

  9. nodejs里的module.exports和exports的关系

    关于node里面的module.exports和exports的异同,网上已经有很多的资料,很多的文章,很多的博客,看了很多,好像懂了,又好像不懂,过几天又不懂了...大致总结是这样的: //下面这种 ...

  10. Android fragment之间消息传递

    1. 在Fragment里定义一个内部接口, 在Fragment初始化方法里, 把父Activity转换成这个接口, 赋值给成员变量 public class DummyFragment extend ...