HDU 4022 Bombing (map + multiset)
题意: 在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)上的点。
- #include <iostream>
- #include <algorithm>
- #include <cmath>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <string>
- #include <vector>
- #include <set>
- #include <map>
- #include <queue>
- #include <stack>
- #include <climits>//形如INT_MAX一类的
- #define MAX 100005
- #define INF 0x7FFFFFFF
- //#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
- using namespace std;
- inline void RD(int &ret) {
- char c;
- int flag = 1 ;
- do {
- c = getchar();
- if(c == '-')flag = -1 ;
- } while(c < '0' || c > '9') ;
- ret = c - '0';
- while((c=getchar()) >= '0' && c <= '9')
- ret = ret * 10 + ( c - '0' );
- ret *= flag ;
- }
- void OT(int a) {
- if(a < 0) {
- putchar('-');
- a = -a;
- }
- if(a >= 10)OT(a / 10);
- putchar(a % 10 + '0');
- }
- typedef map<int ,multiset<int> > MP;
- multiset<int>::iterator it,it2;
- MP x,y;
- int n,m;
- void solvex(int xx) {
- int size = x[xx].size();
- for(it=x[xx].begin(); it != x[xx].end(); it++) {
- int yy = (*it);
- it2 = lower_bound(y[yy].begin(), y[yy].end(),xx);
- while((*it2) == xx) {
- y[yy].erase(xx);
- it2 = lower_bound(y[yy].begin(), y[yy].end(),xx);
- }
- }
- OT(size);
- puts("");
- x[xx].clear();
- }
- void solvey(int yy) {
- int size = y[yy].size();
- for(it=y[yy].begin(); it != y[yy].end(); it ++) {
- int xx = (*it);
- it2 = lower_bound(x[xx].begin(), x[xx].end(),yy);
- while((*it2) == yy) {
- x[xx].erase(yy);
- it2 = lower_bound(x[xx].begin(),x[xx].end(),yy);
- }
- }
- OT(size);
- puts("");
- y[yy].clear();
- }
- int main() {
- int a,b;
- while(scanf("%d%d",&n,&m) ) {
- if(n == 0 && m == 0) break;
- for(int i=0; i<n; i++) {
- RD(a); RD(b);
- x[a].insert(b);
- y[b].insert(a);
- }
- for(int i=0; i<m; i++) {
- RD(a); RD(b);
- if(a == 0) solvex(b);
- if(a == 1) solvey(b);
- }
- puts("");
- }
- return 0;
- }
HDU 4022 Bombing (map + multiset)的更多相关文章
- hdu 4022 Bombing(map,multiset)
题意:n个基地放在2维平面,然后m个炸弹人,每个炸弹人可以炸一行或者一列,输出每个炸弹人炸掉的基地个数. 思路:用map<int,multiset<int> >对应起来一行或者 ...
- HDU 4022 Bombing(stl,map,multiset,iterater遍历)
题目 参考了 1 2 #define _CRT_SECURE_NO_WARNINGS //用的是STL中的map 和 multiset 来做的,代码写起来比较简洁,也比较好容易理解. ...
- HDU 5700 优先队列(或者multiset) 或 线段树
题目大意:有n个区间,求k个区间,使得这k个区间相交的区间内数字之和最大.数列的数字均>=0 优先队列思路: 按照左端点sort,然后枚举左端点,假设他被覆盖过k次,然后用优先队列来维护最右端即 ...
- HDU 3533 Escape(大逃亡)
HDU 3533 Escape(大逃亡) /K (Java/Others) Problem Description - 题目描述 The students of the HEU are maneu ...
- 分布式基础学习(2)分布式计算系统(Map/Reduce)
二. 分布式计算(Map/Reduce) 分 布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce框架所设计的分布式框架.在Hadoop中,分布式文件 系统,很 ...
- HDU 1043 Eight(八数码)
HDU 1043 Eight(八数码) 00 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Descr ...
- 分布式基础学习【二】 —— 分布式计算系统(Map/Reduce)
二. 分布式计算(Map/Reduce) 分布式式计算,同样是一个宽泛的概念,在这里,它狭义的指代,按Google Map/Reduce框架所设计的分布式框架.在Hadoop中,分布式文件系统,很大程 ...
- hdu 5033 buiding(单调栈)
hdu 5033 buiding(单调栈) 某年某月某天,马特去了一个小镇.这个小镇如此狭窄,以至于他可以把小镇当作一个枢纽.在镇上有一些摩天大楼,其中一栋位于xi,高度为hi.所有的摩天大楼位于不同 ...
- IntelliJ IDEA中,mybatis的配置文件(map.xml)无法编译到class文件夹下
编译工具:IntelliJ IDEA 项目结构:maven 项目框架:SSM 问题:java目录下,mybatis的配置文件(map.xml)无法编译到class文件夹下 问题原因:在idea中,直接 ...
随机推荐
- Javascript 生成指定范围数值随机数
JavaScript对随机数的介绍比较少,所以今天分享一下有关随机数的一些事儿.希望能对大家有点小帮助. 主要的公式就是parseInt(Math.random()*(上限-下限+1)+下限); Ma ...
- Restful 和 Jersey介绍(Web Service )
一:REST简单介绍 REST 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之中的一个. REST 中最重要的概念是资源(reso ...
- 菜鸟级springmvc+spring+mybatis整合开发用户登录功能(上)
由于本人愚钝,整合ssm框架真是费劲了全身的力气,所以打算写下这篇文章,一来是对整个过程进行一个回顾,二来是方便有像我一样的笨鸟看过这篇文章后对其有所帮助,如果本文中有不对的地方,也请大神们指教. 一 ...
- js 常用方法记事本
1.获取被选中行的名称<tab选项卡中为iframe> /* S 获取首页被选中的选项卡名称 */ var currTab = $("#layout_center_tabs&qu ...
- 博弈问题之SG函数博弈小结
SG函数: 给定一个有向无环图和一个起始顶点上的一枚棋子,两名选手交替的将这枚棋子沿有向边进行移动,无法移 动者判负.事实上,这个游戏可以认为是所有Impartial Combinatorial Ga ...
- perl eval函数
29.2.32 eval • eval BLOCK • eval EXPR • eval eval 关键字在Perl 里起两种不同的但相关的作用.这些目的是用两种形式的语法 来表现的, eval BL ...
- Windows 和 Linux下使用socket下载网页页面内容(可设置接收/发送超时)的代码
主要难点在于设置recv()与send()的超时时间,具体要注意的事项,请看代码注释部分,下面是代码: #include <stdio.h> #include <sys/types. ...
- LEAVE LIST-PROCESSING和LEAVE TO LIST-PROCESSING事件的作用
START-OF-SELECTION. MESSAGE '屏幕报错' TYPE 'S' DISPLAY LIKE 'E'. LEAVE LIST-PROCESSING. 这样子的话 报错会返回包选择屏 ...
- StackOverFlow的2016统计
http://stackoverflow.com/research/developer-survey-2016
- 发掘ListBox的潜力(三):显示即时提示(Tips)
ListBox显示即时提示(Tips) Listbox内容太长时超出Listbox宽度的部分将无法显示,一种解决方法是让Listbox产生横向滚动条,滚动显示内容(见前面的<发掘ListBox的 ...