bzoj 1007 凸壳
首先明确一个概念

左面内个叫上凸壳,右面那个叫下凸壳
然后我们只需要维护一个上图壳就行了,先按着斜率排序,每次加进来一条边,判断tot边和这个边与tot-1边的交点横坐标,
如果这条边的横坐标小就一直弹栈就好了
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/
//By BLADEVIL
var
n :longint;
a, b, num :array[..] of longint;
quea, queb :array[..] of longint;
tot :longint;
quex :array[..] of double;
ans :array[..] of longint;
i :longint;
procedure swap(var a,b:longint);
var
c :longint;
begin
c:=a; a:=b; b:=c;
end;
procedure qs(low,high:longint);
var
i, j, xx, yy :longint;
begin
i:=low; j:=high; xx:=a[(i+j) div ];
yy:=b[(i+j) div ];
while i<j do
begin
while (a[i]<xx) or (a[i]=xx) and (b[i]>yy) do inc(i);
while (a[j]>xx) or (a[j]=xx) and (b[j]<yy) do dec(j);
if i<=j then
begin
swap(a[i],a[j]);
swap(b[i],b[j]);
swap(num[i],num[j]);
inc(i); dec(j);
end;
end;
if i<high then qs(i,high);
if j>low then qs(low,j);
end;
procedure qs1(low,high:longint);
var
i, j, xx :longint;
begin
i:=low; j:=high; xx:=ans[(i+j) div ];
while i<j do
begin
while ans[i]<xx do inc(i);
while ans[j]>xx do dec(j);
if i<=j then
begin
swap(ans[i],ans[j]);
inc(i); dec(j);
end;
end;
if i<high then qs1(i,high);
if j>low then qs1(low,j);
end;
procedure insert(i:longint);
var
k :longint;
x :double;
begin
if a[i]=quea[tot] then exit;
if tot> then
begin
x:=(queb[tot-]-b[i])/(a[i]-quea[tot-]);
while (tot>) and (x<=quex[tot]) do
begin
dec(tot);
x:=(queb[tot-]-b[i])/(a[i]-quea[tot-]);
end;
end;
inc(tot);
quea[tot]:=a[i];
queb[tot]:=b[i];
quex[tot]:=(queb[tot-]-b[i])/(a[i]-quea[tot-]);
ans[tot]:=num[i];
end;
begin
read(n);
for i:= to n do read(a[i],b[i]);
for i:= to n do num[i]:=i;
qs(,n);
quea[]:=a[]; queb[]:=b[];
quex[]:=-maxlongint; ans[]:=num[];
tot:=;
for i:= to n do insert(i);
qs1(,tot);
for i:= to tot do write(ans[i],' ');
end.
bzoj 1007 凸壳的更多相关文章
- BZOJ.1007.[HNOI2008]水平可见直线(凸壳 单调栈)
题目链接 可以看出我们是要维护一个下凸壳. 先对斜率从小到大排序.斜率最大.最小的直线是一定会保留的,因为这是凸壳最边上的两段. 维护一个单调栈,栈中为当前可见直线(按照斜率排序). 当加入一条直线l ...
- BZOJ 3672 [Noi2014]购票 (熟练剖分+凸壳维护)
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3672 题意:给出一棵有根树(1为根),边有长度.每个点u有三个属性(len[u], ...
- bzoj 3165: [Heoi2013]Segment 动态凸壳
3165: [Heoi2013]Segment Time Limit: 40 Sec Memory Limit: 256 MBSubmit: 202 Solved: 89[Submit][Stat ...
- BZOJ 1007 水平可见直线 | 计算几何
BZOJ 1007 水平可见直线 题面 平面直角坐标系上有一些直线,请求出在纵坐标无限大处能看到哪些直线. 题解 将所有直线按照斜率排序(平行的直线只保留最高的直线),维护一个栈,当当前直线与栈顶直线 ...
- AC日记——[HNOI2008]水平可见直线 bzoj 1007
1007 思路: 维护一个下凸壳: 用单调栈来维护这玩意儿: 先将斜率排序: 然后判断栈顶元素和当前元素的交点x是否小于栈顶元素和栈顶上一个元素的交点x: 注意: 人神共愤的精度问题和输出空格问题: ...
- [CF1137E]Train Car Selection[维护凸壳]
题意 题目链接 分析 首先,如果加到了车头所有之前的车厢都不可能成为答案. 如果加到了车尾,容易发现对于 \(x_2<x_3\) 而言在某个时刻会出现 2 又比 3 优的情况. 具体来讲,如果存 ...
- [BZOJ2726][SDOI2012]任务安排(DP+凸壳二分)
2726: [SDOI2012]任务安排 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1580 Solved: 466[Submit][Statu ...
- ZOJ 3937 More Health Points (2016 浙江省赛 B题,可持久维护凸壳)
题目链接 2016 ZJCPC Problem B 题意 CF 660F的树上版本. 其他做的方法都差不多,关键是把凸壳放到树上. 每次确定扔掉几个元素的时候直接$O(1)$修改(先不清楚这个位置 ...
- [Gym101982M][思维好题][凸壳]Mobilization
[gym101982M][思维好题][凸壳]Mobilization 题目链接 20182019-acmicpc-pacific-northwest-regional-contest-div-1-en ...
随机推荐
- 《剑指offer》题解
有段时间准备找工作,囫囵吞枣地做了<剑指offer>提供的编程习题,下面是题解收集. 当初没写目录真是个坏习惯(-_-)||,自己写的东西都要到处找. 提交的源码可以在此repo中找到:h ...
- Kotlin 0
#0 下载与配置: 官网上写的很详细,不再重复. #1 Hello world fun main(args: Array<String>) { println("Hello, w ...
- ABP官方文档
https://aspnetboilerplate.com/Pages/Documents/Introduction
- Selenium LoadableComponent加载组件
继承LoadableComponent类可以在打开地址时, 判断浏览器是否打开了预期的网址, 需要重写load()与isLoad()方法: 即使没有定义get()方法, 也可以进行get()方法的调用 ...
- spring与mybatis整合(基于配置文件)
本文主要介绍了如何将mybatis和spring整合在一起使用,本人使用的是mybatis3.05 + spring3.1.0M2 ,使用dbcp作为数据库连接池. 1.编写数据访问接口(UserDa ...
- Java 8手动实现一个Collector
我们看一下Stream中的collect的方法. collect(toList())方法由Stream里的值生成一个列表,是一个及早求值的操作. Stream的of方法使用一个初始值生成新的Strea ...
- antDesign DatePicker 禁用日期
const disabledDate = (current) => { return current < moment().subtract(29, 'days') || current ...
- chrome谷歌浏览器导致的密码被修改现象
版本 68.0.3440.106(正式版本) (32 位)记住密码功能有个缺陷,会把自己的密码自动填写到别人的密码框中,假如这个时候点击保存密码,就会导致其他用户的密码被修改为登录用户的密码. 很 ...
- 搭建springmvc项目没扫描到mapper和service
严重: Servlet.service() for servlet [spring] in context with path [/springmvc-demo] threw exceptionorg ...
- document.querySelector()和document.querySelectorAll()
HTML5向Web API新引入了 document.querySelector()和document.querySelectorAll()两个方法,都可以接收三种类型的参数:id(#),class( ...