题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5091

题意:给你n个二维平面的点  矩形的高h,宽w,让你求这个矩形 在某个位置时包括的最多的点的数量

扫面线板子,注意处理坐标的方式

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <map>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define clr0(x) memset(x,0,sizeof(x))
#define clr1(x) memset(x,-1,sizeof(x))
#define eps 1e-9
const double pi = acos(-1.0);
typedef long long LL;
#define lson i*2,l,m
#define rson i*2+1,m+1,r
const int MAXN=200000+5;//因为点有1W个,所以扫描线2W个,不同的Y坐标最多有2W个
int cnt[MAXN*4],sum[MAXN*4];
double Y[MAXN];
struct seg
{double l,r,h;int d;seg(){}seg(double a,double b,double c,int d):l(a),r(b),h(c),d(d){}bool operator <(const seg&b)const{if(h == b.h) return d>b.d;return h<b.h;}
}ss[MAXN];
void PushUp(int i)
{sum[i]=max(sum[i*2],sum[i*2+1]) + cnt[i];
}
void update(int ql,int qr,int v,int i,int l,int r)
{if(ql<=l && r<=qr){cnt[i]+=v;sum[i]+=v;return ;}int m=(l+r)>>1;if(ql<=m) update(ql,qr,v,lson);if(m<qr) update(ql,qr,v,rson);PushUp(i);
}
int main()
{int n;double w,h;while(~RD(n)){if(n == -1)break;scanf("%lf%lf",&w,&h); w+=0.5,h+=0.5;double x,y;int val;int cnt_y=0,cnt_ss=0;//记录有多少个Y值和扫描线for(int i=1;i<=n;i++){scanf("%lf%lf",&x,&y);//x+=20000,y+=20000;ss[cnt_ss++] = seg(y-h/2,y+h/2,x-w/2,1);ss[cnt_ss++] = seg(y-h/2,y+h/2,x+w/2,-1);Y[cnt_y++] = y-h/2;Y[cnt_y++] = y+h/2;}sort(ss,ss+cnt_ss);sort(Y,Y+cnt_y);cnt_y = unique(Y,Y+cnt_y)-Y;int ans=0;clr0(cnt),clr0(sum);for(int i=0;i<cnt_ss-1;i++){int ql=lower_bound(Y,Y+cnt_y,ss[i].l)-Y;int qr=lower_bound(Y,Y+cnt_y,ss[i].r)-Y-1;if(ql<=qr) update(ql,qr,ss[i].d,1,0,cnt_y-1);ans=max(ans,sum[1]);}printf("%d\n",ans);}
}

Beam Cannon HDU - 5091 (扫描线) 求矩形内的点的数量相关推荐

  1. Picture HDU - 1828 (扫描线求矩形周长并)

    题目连接:https://cn.vjudge.net/problem/HDU-1828 题意:给你n个矩形,让你求矩形的轮廓的周长之和 两遍扫描线从左到右,从下到上即可. #include <i ...

  2. 线段树扫描线求矩形周长详解

    线段树扫描线求矩形周长详解 原创 wucstdio 最后发布于2018-04-24 16:12:09 阅读数 841 收藏 发布于2018-04-24 16:12:09 版权声明:本文为博主原创文章, ...

  3. hdu 1255 覆盖的面积 (扫描线求矩形交)

    覆盖的面积 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. poj 1177 线段树+离散化+扫描线 求矩形并的轮廓长

    Picture 题意:求矩形面积并额轮廓长 解法:扫描线+离散化+线段树 做法:等于更新操作前后的tree[1].len差,做法这么巧妙实际我也不知道为什么.差不多的意思就是更新操作的cover变化长 ...

  5. hdu1828 线段树扫描线求矩形面积的周长

    题意:       给你n个矩形,问你这n个矩形所围成的图形的周长是多少. 思路:       线段树的扫描线简单应用,这个题目我用的方法比较笨,就是扫描两次,上下扫描,求出多边形的上下边长和,然后同 ...

  6. 蒙特卡洛算法求矩形内切圆面积

    已知:矩形长宽皆为1,则内切圆半径为0.5.求:该圆面积(利用蒙特卡洛算法) 编程思路如下: 1,利用random.unifom生成0到1之间的数字,分别赋值给x,y. 2,判断生成点是否落在矩形区域 ...

  7. hdu1542 线段树扫描线求矩形面积的并

    题意:       给你n个正方形,求出他们的所占面积有多大,重叠的部分只能算一次. 思路:       自己的第一道线段树扫描线题目,至于扫描线,最近会写一个总结,现在就不直接在这里写了,说下我的方 ...

  8. hdu 4007 Dave 求矩形圈点最大值

    对于每个点,扩成一个矩形,变成求最大重叠层数: 注意边界的处理,这里是横纵均加一: 可能在边界上会产生一些问题,在排序的时候修正: #include<algorithm> #include ...

  9. POJ1151(线段树+扫描线求矩形面积并)

    题目:http://poj.org/problem?id=1151 #include <iostream> #include <string.h> #include <a ...

最新文章

  1. TPP多租户隔离之资源清理
  2. java web 笔试 题_JavaWeb综合笔试题(带答案).doc
  3. 比较两个日期大小和获取当前月最大天数的存储过程
  4. sqlserver获得到当前游标中存在的数据行数
  5. makefile之通配符(4)
  6. java gc与finalize_finalize方法与Java GC
  7. c++ 单引和双引的区别
  8. Windows-Server-2012-如何实现多个用户远程桌面登陆
  9. python导入鸢尾花数据集_python可视化分析鸢尾花数据集
  10. es的range过滤_ElasticSearch 常用的查询过滤语句
  11. java中的gc是什么意思的缩写_gc是什么意思(gc是什么意思的缩写)
  12. 为什么博途V17及以下的HMI面板不能与1500固件版本2.9或1200版本4.5 的CPU建立连接?
  13. 路口待行区设置条件与通行效能分析
  14. 银行卡识别技术-移动支付新宠儿
  15. Room 使用及初步分析
  16. ThinkAdmin学习总结
  17. 吸烟者问题C++实现
  18. 移动宽带运营商服务器未响应,中国移动宽带网络有问题怎么办
  19. 系统集成十大项目管理(1)
  20. 如何查看AD域账号的删除记录

热门文章

  1. 十年一觉扬州梦,赢得青楼薄幸名
  2. ROS-RouterOS hAP ac2+usb 4G上网卡+小米新推的无线上网卡是绝配
  3. Item Tagging for Information Retrieval: A Tripartite Graph Neural Network based Approach 用于信息检索的项目标签
  4. 苹果iOS4被开发者做成 App
  5. 【PCB】Altium Designer 中(Via过孔)(文本string)(走线Linear Dimension)等项目修改默认设置
  6. 【python编程】使用python获取机器所在网络的公网IP(第二种方法)
  7. 数据结构与算法 -- 树结构与图结构
  8. vs如何调出黑色的界面主题
  9. 三款学生必备的学习笔记工具,让你暑假变学霸
  10. 由一张血管图片引发的算法分析(二)