题意: 在x,y坐标范围为10 ^ -9 ~~ 10 ^ 9的坐标轴之中,有 10W个点(注意有些点可能在同一坐标上),然后有10W个询问,处理询问按照输入顺序处理,对于每个询问a,b    a == 0 代表对 x == b轴处理; a == 1 代表 对y == b轴处理。处理即为把该轴上的点全部清空,输出清空的点的数量。已经清空的点,不计算在接下来的询问中。

思路:map + multiset 对于x轴和y轴,分别用两个map 映射,每一个x(或者y)轴都对应着一排点,这些点用multiset存储,为的是在里面二分找需要擦除的y(或者x)上的点。

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <cstdio>
  5. #include <cstdlib>
  6. #include <cstring>
  7. #include <string>
  8. #include <vector>
  9. #include <set>
  10. #include <map>
  11. #include <queue>
  12. #include <stack>
  13. #include <climits>//形如INT_MAX一类的
  14. #define MAX 100005
  15. #define INF 0x7FFFFFFF
  16. //#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
  17. using namespace std;
  18.  
  19. inline void RD(int &ret) {
  20. char c;
  21. int flag = 1 ;
  22. do {
  23. c = getchar();
  24. if(c == '-')flag = -1 ;
  25. } while(c < '0' || c > '9') ;
  26. ret = c - '0';
  27. while((c=getchar()) >= '0' && c <= '9')
  28. ret = ret * 10 + ( c - '0' );
  29. ret *= flag ;
  30. }
  31. void OT(int a) {
  32. if(a < 0) {
  33. putchar('-');
  34. a = -a;
  35. }
  36. if(a >= 10)OT(a / 10);
  37. putchar(a % 10 + '0');
  38. }
  39.  
  40. typedef map<int ,multiset<int> > MP;
  41. multiset<int>::iterator it,it2;
  42. MP x,y;
  43. int n,m;
  44.  
  45. void solvex(int xx) {
  46. int size = x[xx].size();
  47. for(it=x[xx].begin(); it != x[xx].end(); it++) {
  48. int yy = (*it);
  49. it2 = lower_bound(y[yy].begin(), y[yy].end(),xx);
  50. while((*it2) == xx) {
  51. y[yy].erase(xx);
  52. it2 = lower_bound(y[yy].begin(), y[yy].end(),xx);
  53. }
  54. }
  55. OT(size);
  56. puts("");
  57. x[xx].clear();
  58. }
  59.  
  60. void solvey(int yy) {
  61. int size = y[yy].size();
  62. for(it=y[yy].begin(); it != y[yy].end(); it ++) {
  63. int xx = (*it);
  64. it2 = lower_bound(x[xx].begin(), x[xx].end(),yy);
  65. while((*it2) == yy) {
  66. x[xx].erase(yy);
  67. it2 = lower_bound(x[xx].begin(),x[xx].end(),yy);
  68. }
  69. }
  70. OT(size);
  71. puts("");
  72. y[yy].clear();
  73. }
  74.  
  75. int main() {
  76. int a,b;
  77. while(scanf("%d%d",&n,&m) ) {
  78. if(n == 0 && m == 0) break;
  79. for(int i=0; i<n; i++) {
  80. RD(a); RD(b);
  81. x[a].insert(b);
  82. y[b].insert(a);
  83. }
  84. for(int i=0; i<m; i++) {
  85. RD(a); RD(b);
  86. if(a == 0) solvex(b);
  87. if(a == 1) solvey(b);
  88. }
  89. puts("");
  90. }
  91. return 0;
  92. }

HDU 4022 Bombing (map + multiset)的更多相关文章

  1. hdu 4022 Bombing(map,multiset)

    题意:n个基地放在2维平面,然后m个炸弹人,每个炸弹人可以炸一行或者一列,输出每个炸弹人炸掉的基地个数. 思路:用map<int,multiset<int> >对应起来一行或者 ...

  2. HDU 4022 Bombing(stl,map,multiset,iterater遍历)

    题目 参考了     1     2 #define _CRT_SECURE_NO_WARNINGS //用的是STL中的map 和 multiset 来做的,代码写起来比较简洁,也比较好容易理解. ...

  3. HDU 5700 优先队列(或者multiset) 或 线段树

    题目大意:有n个区间,求k个区间,使得这k个区间相交的区间内数字之和最大.数列的数字均>=0 优先队列思路: 按照左端点sort,然后枚举左端点,假设他被覆盖过k次,然后用优先队列来维护最右端即 ...

  4. HDU 3533 Escape(大逃亡)

    HDU 3533 Escape(大逃亡) /K (Java/Others)   Problem Description - 题目描述 The students of the HEU are maneu ...

  5. 分布式基础学习(2)分布式计算系统(Map/Reduce)

    二. 分布式计算(Map/Reduce) 分 布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce框架所设计的分布式框架.在Hadoop中,分布式文件 系统,很 ...

  6. HDU 1043 Eight(八数码)

    HDU 1043 Eight(八数码) 00 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)   Problem Descr ...

  7. 分布式基础学习【二】 —— 分布式计算系统(Map/Reduce)

    二. 分布式计算(Map/Reduce) 分布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce框架所设计的分布式框架.在Hadoop中,分布式文件系统,很大程 ...

  8. hdu 5033 buiding(单调栈)

    hdu 5033 buiding(单调栈) 某年某月某天,马特去了一个小镇.这个小镇如此狭窄,以至于他可以把小镇当作一个枢纽.在镇上有一些摩天大楼,其中一栋位于xi,高度为hi.所有的摩天大楼位于不同 ...

  9. IntelliJ IDEA中,mybatis的配置文件(map.xml)无法编译到class文件夹下

    编译工具:IntelliJ IDEA 项目结构:maven 项目框架:SSM 问题:java目录下,mybatis的配置文件(map.xml)无法编译到class文件夹下 问题原因:在idea中,直接 ...

随机推荐

  1. Javascript 生成指定范围数值随机数

    JavaScript对随机数的介绍比较少,所以今天分享一下有关随机数的一些事儿.希望能对大家有点小帮助. 主要的公式就是parseInt(Math.random()*(上限-下限+1)+下限); Ma ...

  2. Restful 和 Jersey介绍(Web Service )

    一:REST简单介绍 REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之中的一个. REST 中最重要的概念是资源(reso ...

  3. 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)

    由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一 ...

  4. js 常用方法记事本

    1.获取被选中行的名称<tab选项卡中为iframe> /* S 获取首页被选中的选项卡名称 */ var currTab = $("#layout_center_tabs&qu ...

  5. 博弈问题之SG函数博弈小结

    SG函数: 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Ga ...

  6. perl eval函数

    29.2.32 eval • eval BLOCK • eval EXPR • eval eval 关键字在Perl 里起两种不同的但相关的作用.这些目的是用两种形式的语法 来表现的, eval BL ...

  7. Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码

    主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: #include <stdio.h> #include <sys/types. ...

  8. LEAVE LIST-PROCESSING和LEAVE TO LIST-PROCESSING事件的作用

    START-OF-SELECTION. MESSAGE '屏幕报错' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. 这样子的话 报错会返回包选择屏 ...

  9. StackOverFlow的2016统计

    http://stackoverflow.com/research/developer-survey-2016

  10. 发掘ListBox的潜力(三):显示即时提示(Tips)

    ListBox显示即时提示(Tips) Listbox内容太长时超出Listbox宽度的部分将无法显示,一种解决方法是让Listbox产生横向滚动条,滚动显示内容(见前面的<发掘ListBox的 ...