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);进行判断一下

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

  1. #include<iostream>
  2. #include<math.h>
  3. #include<algorithm>
  4. #include<stdlib.h>
  5. #include<time.h>
  6. using namespace std;
  7. #define ll long long
  8. #define re(i,n) for(int i=0;i<n;i++)
  9. const int maxn = 1007;
  10. int a[maxn][maxn];
  11. bool sta[maxn][maxn];
  12. int lowbit(int x){
  13. return x&-x;
  14. }
  15. void update(int x, int y, int d){
  16. for (int i = x; i < maxn; i+=lowbit(i)){
  17. for (int j = y; j < maxn; j+=lowbit(j)){
  18. a[i][j] += d;
  19. }
  20. }
  21. }
  22. int query(int x, int y){
  23. int ans = 0;
  24. for (int i = x; i>0; i -= lowbit(i)){
  25. for (int j = y; j>0; j -= lowbit(j)){
  26. ans += a[i][j];
  27. }
  28. }
  29. return ans;
  30. }
  31. int main(){
  32. freopen("in.txt", "r", stdin);
  33. int q; cin >> q;
  34. memset(a, 0, sizeof(a)), memset(sta, 0, sizeof(sta));
  35. while (q--){
  36. char op[2]; scanf("%s", op);
  37. if (op[0] == 'Q'){
  38. int fx, fy, tx, ty; scanf("%d%d%d%d", &fx, &tx, &fy, &ty);
  39. fx++, fy++, tx++, ty++;
  40. if (fx>tx)swap(fx, tx); if (fy > ty)swap(fy, ty);
  41. fx--, fy--;
  42. int ans = query(tx, ty) + query(fx, fy) - query(tx, fy) - query(fx, ty);
  43. printf("%d\n", ans);
  44. }
  45. else{
  46. int x, y; scanf("%d%d", &x, &y); x++, y++;
  47. if (op[0] == 'B'){
  48. if (sta[x][y])continue;
  49. update(x, y, 1), sta[x][y] = 1;
  50. }
  51. else{
  52. if (sta[x][y] == false)continue;
  53. update(x, y, -1), sta[x][y] = 0;
  54. }
  55. }
  56. }
  57. return 0;
  58. }

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. android handler runnable使用实例(关键是内部run中停止)

    .java package com.example.mydemo; import android.app.Activity; import android.os.Bundle; import andr ...

  2. Nagios监控ganglia的指标

    这是nagios与ganglia整合的一部分内容 . 通常我们会把ganglia的监控发送给一个主机,我们可以在这个主机上执行nc localhost 8649 可以获取到所有发往这个主机的信息,以x ...

  3. 学习OpenStack之 (2):Cinder LVM 配置

    0.背景 OpenStack 中的实例是不能持久化的,cinder服务重启,实例消失.如果需要挂载 volume,需要在 volume 中实现持久化.Cinder提供持久的块存储,目前仅供给虚拟机挂载 ...

  4. html5新增及删除标签

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

  5. 150925-周五不干活-HTML(CSS),Javascript

    不干活就干自己.. 今天所有代码总结为一个如下 <!DOCTYPE HTML><html><head><meta http-equiv="Conte ...

  6. Binary Tree: Write a function to return count of nodes in binary tree which has only one child.

    June 8, 2015 我最喜欢的一道算法题目, 二行代码. 编程序需要很强的逻辑思维, 严密,我还没有很好训练自己.想一想, 二行代码, 五分钟就可以搞定; 最近这几天网上大家热议的 Homebr ...

  7. libsvm Minist Hog 手写体识别(源码文件)

    以上是我上一篇文章中的代码实现,里面分别用了opencv中的SVM和LibSVM,opencv的SVM用起来更方便,但貌似内部其实也是基于Libsvm,同样的参数训练出来的结果是一致的,里面有Libs ...

  8. 编辑器插件数据保存之Serializable

    Editor数据保存需求 做编辑器插件开发时,当打开一个窗口,对数值进行修改后,在关闭窗口或重新打开Unity时,希望能保存上次的数据. 相关知识 Serialization ,ScriptableO ...

  9. nginx的主要用途

    1.反向代理加速(无缓存),简单的负载均衡和容错  : 问题一:为什么反向代理可以做加速服务器? 反向代理接受发给web服务器的真实请求,但与web服务器不同的是,它们可以向其他的服务器进行通信.以便 ...

  10. 【深入ASP.NET原理系列】--ASP.NET页面生命周期

    前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...