传送门

我们把所有的直线按斜率从小到大排序,然后用单调栈维护
发现,如果当前直线与\(st[top-1]\)直线的交点的横坐标大于等于与\(st[top]\)的交点的横坐标,当前直线可以覆盖掉\(st[top]\)
这个可以画图理解一下

//minamoto
#include<bits/stdc++.h>
#define rint register int
using namespace std;
#define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
char buf[1<<21],*p1=buf,*p2=buf;
int read(){int res,f=1;char ch;while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');return res*f;
}
const int N=50005;
struct node{int a,b,id;inline bool operator <(const node &q)const{return a==q.a?b>q.b:a<q.a;}
}p[N];int n,st[N],top;
inline double solve(int i,int j){return (double)(p[i].b-p[j].b)/(p[j].a-p[i].a);}
int main(){
//  freopen("testdata.in","r",stdin);n=read();for(rint i=1;i<=n;++i)p[i].a=read(),p[i].b=read(),p[i].id=i;sort(p+1,p+1+n),st[top=0]=1;for(rint i=2;i<=n;++i){if(p[i].a==p[i-1].a)continue;while(top&&solve(st[top],i)<=solve(st[top-1],i))--top;st[++top]=i;}for(rint i=0;i<=top;++i)st[i]=p[st[i]].id;sort(st,st+1+top);for(rint i=0;i<=top;++i)printf("%d ",st[i]);return 0;
}

转载于:https://www.cnblogs.com/bztMinamoto/p/9989533.html

P3194 [HNOI2008]水平可见直线相关推荐

  1. bzoj1007[HNOI2008]水平可见直线

    bzoj1007[HNOI2008]水平可见直线 题意: 平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.给出n条直线 ...

  2. bzoj 1007: [HNOI2008]水平可见直线

    1007: [HNOI2008]水平可见直线 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 7378  Solved: 2829 [Submit][S ...

  3. 【洛谷 P3194】 [HNOI2008]水平可见直线 (单调栈)

    题目链接 把线段以斜率为第一关键字,截距为第二关键字升序排序. 然后维护一个单调栈,保证栈中两两线段的交点的\(x\)坐标单调上升就行了.栈中的线段即为所求. #include <cstdio& ...

  4. [BZOJ1007] [HNOI2008] 水平可见直线 (凸包)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的. 例如,对于直线:L1:y=x ...

  5. bzoj 1007 : [HNOI2008]水平可见直线 计算几何

    题目链接 给出n条直线, 问从y轴上方向下看, 能看到哪些直线, 输出这些直线的编号. 首先我们按斜率排序, 然后依次加入一个栈里面, 如果刚加入的直线, 和之前的那条直线斜率相等, 那么显然之前的会 ...

  6. [BZOJ1007](HNOI2008)水平可见直线(半平面交习题)

    Description 在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.     例如,对于直线:   ...

  7. BZOJ.1007.[HNOI2008]水平可见直线(凸壳 单调栈)

    题目链接 可以看出我们是要维护一个下凸壳. 先对斜率从小到大排序.斜率最大.最小的直线是一定会保留的,因为这是凸壳最边上的两段. 维护一个单调栈,栈中为当前可见直线(按照斜率排序). 当加入一条直线l ...

  8. _bzoj1007 [HNOI2008]水平可见直线【单调栈】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1007 按斜率排序,去掉斜率相同时,截距较小的直线(即只保留该斜率下截距最大的直线).若当前直 ...

  9. HYSBZ/BZOJ 1007 [HNOI2008] 水平可见直线 - 计算几何

    题目描述 分析: 直角坐标系内,有n条直线分布,求:最大值(对于任意x,直线上能取到的max( f(x) ))构成的折线由哪些直线构成. Solution : 把直线按照斜率从小到大排序. 从左到右: ...

  10. [HNOI2008]水平可见直线 半平面交

    求向直线们的俯视视角中可见的直线,以为是选最大最小斜率然后往中间放..其实就是半平面交 //#include<bits/stdc++.h> //#pragma comment(linker ...

最新文章

  1. python使用正则表达式判别用户输入密码的强弱并提示
  2. php蛇蛇大作战,Android ConstraintLayout 2.0:ConstraintLayoutStates
  3. IHttpModule.Init方法被执行多次的原因
  4. 对比Javascript和TypeScript
  5. 彻底弄懂C语言数组名
  6. Java实现读取pdf文件内容(how to read pdf in java)
  7. 前端三种消息框alert,confirm,prompt
  8. shell date 日期格式化_抖音短视频系统开发,日期加减
  9. nlp论文-《Neural Machine Translation by Jointly Learning to Align and Translate》-基于联合学习对齐和翻译的神经机器翻译(二)
  10. iOS-按钮单选与多选逻辑处理
  11. 牛客假日团队赛1 A.蹄球锦标赛
  12. python爬虫怎么赚钱-《python爬虫怎么挣钱》 - 微赚接单平台
  13. vivado DEBUG使用说明
  14. Android手机RTMP播放工具(APK,支持秒开)
  15. Java二叉树前序遍历
  16. 十张图看懂华为IPD和LTC
  17. 第十二周项目四----利用遍历思想求解图问题之输出简单路径
  18. VC中常见的108个问题
  19. [jQuery.FQcomputer] 分期商城汇率计算器
  20. AjaxPro.dll 下载及使用

热门文章

  1. 修改msde登录方式,设置sa密码为空
  2. HDU1757:A Simple Math Problem(矩阵快速幂)
  3. python源码中的学习笔记_第7章_字符串
  4. 多标签分类任务大赛50万奖金等你来
  5. 搜索系统中的纠错问题
  6. 【Pytorch】Pytorch常见的坑汇总
  7. 李宏毅-《深度学习人类语言处理》国语版(2020)视频课程及ppt分享
  8. 【NLP基础】手把手带你fastText文本分类(附代码)
  9. 通俗易懂!《图机器学习导论》附69页PPT
  10. 【每日算法Day 109】五大解法,带你深入了解完全背包方案数