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. Linux文件I/O

    文件描述符(File Descriptor) a small, nonnegative integer for use in subsequent system calls (read(2), wri ...

  2. su认证失败&文件夹里打开终端的方法&atom安装

    很久没用笔记本上的ubuntu,用不顺手,比在公司调教了半年多的电脑差远了.一步一步来.先解决最不顺手的三件事 1.su认证失败. 新安装的ubuntu系统是无法切换到root账户的,得做一番修改 s ...

  3. https协议了解,以及相关协议的解析

    HTTPS简介 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版. ...

  4. linux线程同步(1)-互斥量

    一.概述                                                   互斥量是线程同步的一种机制,用来保护多线程的共享资源.同一时刻,只允许一个线程对临界区进行 ...

  5. Centos下mysql数据库备份与恢复的方法

    一.mysqldump工具备份 mysqldump由于是mysql自带的备份工具,所以也是最常用的mysql数据库的备份工具.支持基于InnoDB的热备份.但由于是逻辑备份,所以速度不是很快,适合备份 ...

  6. CentOS下mysql默认安装位置

    如果采用RPM包安装,安装路径应在/usr/share/mysql目录下 mysqldump文件位置:/usr/bin/mysqldump mysqli配置文件: /etc/my.cnf或/usr/s ...

  7. 谁在死锁Mutex——用Windbg查找Mutex死锁所有者线程

    Who is blocking that Mutex? - Fun with WinDbg, CDB and KD 05 Aug 2006 By Ingo Rammer I'm currently t ...

  8. [转]simple sample to create and use widget for nopcommerce

    本文转自:http://badpaybad.info/simple-sample-to-create-and-use-widget-for-nopcommerce Here is very simpl ...

  9. 【CSS】使用边框和背景

    1. 应用边框样式 先从控制边框样式的属性开始.简单边框有三个关键属性:border-width.border-style 和 border-color . <!DOCTYPE html> ...

  10. XML操作类

        using System; using System.Data; using System.IO; using System.Xml; namespace DotNet.Utilities { ...