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 ...
随机推荐
- Android系统自带样式
android:theme="@android:style/Theme.Dialog" 将一个Activity显示为能话框模式 android:theme="@andr ...
- vue循环绑定v-model
直接上代码 结构: <repayInput v-if="formData" v-for="(item, index) in formData" :isPw ...
- 「题目代码」P1034~P1038(Java)
P1034 C基础-求同存异 import java.util.*; import java.io.*; import java.math.BigInteger; public class Main ...
- python,批量生成指定格式的审核数据(传输参数格式为数组时)
#思路#获取list长度(例如列表有20条数据,则生成20条数据),生成数组长度为list元素的数据,完成对列表20条数据的批量审核def createBatchData(self,str_in,li ...
- C# 删除文件错误 access denied
使用以下代码正常删除整个文件夹内容时,报错如下: if (backupPathDir.Exists) { System.IO.DirectoryInfo di = new DirectoryInfo( ...
- 参加2018之江杯全球人工智能大赛 :视频识别&问答(四)
很遗憾没有在规定的时间点(2018-9-25 12:00:00)完成所有的功能并上传数据,只做到写了模型代码并只跑了一轮迭代,现将代码部分贴出. import keras from keras.lay ...
- OpenPAI:大规模人工智能集群管理平台介绍及任务提交指南
产品渊源: 随着人工智能技术的快速发展,各种深度学习框架层出不穷,为了提高效率,更好地让人工智能快速落地,很多企业都很关注深度学习训练的平台化问题.例如,如何提升GPU等硬件资源的利用率?如何节省硬件 ...
- BZOJ 2946 POI2000 公共串 后缀自动机(多串最长公共子串)
题意概述:给出N个字符串,每个串的长度<=2000(雾...可能是当年的年代太久远机子太差了),问这N个字符串的最长公共子串长度为多少.(N<=5) 抛开数据结构,先想想朴素做法. 设计一 ...
- 软工实践Beta冲刺(2/7)
队名:起床一起肝活队 组长博客:博客链接 作业博客:班级博客本次作业的链接 组员情况 组员1(队长):白晨曦 过去两天完成了哪些任务 描述: 1.界面的修改与完善 展示GitHub当日代码/文档签入记 ...
- weak_ptr打破环状引用
转自:http://blog.csdn.net/malong777/article/details/48974559 weak_ptr是一种不控制对象生存周期的智能指针,它指向一个shared_ptr ...