题意:给定一个折线图,按x轴递增的顺序给出。对于每个条line,求出在它之后,且下标最小的line。输出这个下标。 其中n≤100000n≤100000n\leq100000。
首先我们需要用线段树,每个节点维护这个节点所表示的区间的点的凸包。
查询的时候,我们可以判断当前的区间的凸包是否与原直线有交点,如果有的话就递归左子树,如果左子树的凸包存在与原直线的交点,那么就可以直接返回,否则再递归右子树判断。
快速判断一个凸包与一条直线是否有交点,我们可以考虑二分,利用向量叉积的几何意义即可。具体就看看代码吧。
如果有误在评论区吼一声哦!
代码:

#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n;
struct Vector{int x,y;Vector(int a=0,int b=0):x(a),y(b){}friend ll operator*(Vector a,Vector b){return 1ll*a.x*b.y-1ll*b.x*a.y;}friend Vector operator-(Vector a,Vector b){return Vector(a.x-b.x,a.y-b.y);}
}a[100010];
struct Convex_hull{vector<Vector>c;void insert(Vector a){for(int j=c.size();j>1&&(a-c[j-2])*(c[j-1]-c[j-2])<=0;j--)c.pop_back();c.push_back(a);return;}bool check(Vector a,Vector b){int l=0,r=c.size()-2;while(l<r){int mid=(l+r)>>1;if((c[mid]-a)*(b-a)<(c[mid+1]-a)*(b-a))r=mid;else l=mid+1;}return (c[l]-a)*(b-a)<0||(c[l+1]-a)*(b-a)<0;}
}tr[400010];
void build(int o,int l,int r){if(l==r){tr[o].insert(a[l]);tr[o].insert(a[l+1]);return;}for(int i=l;i<=r+1;i++)tr[o].insert(a[i]);int mid=(l+r)>>1;build(o<<1,l,mid);build(o<<1|1,mid+1,r);return;
}
int query(int o,int l,int r,int L,int R,Vector a,Vector b){if(L<=l&&r<=R){if(!tr[o].check(a,b))return 0;if(l==r)return l;}int mid=(l+r)>>1,ret=0;if(L<=mid)ret=query(o<<1,l,mid,L,R,a,b);if(!ret&&R>mid)ret=query(o<<1|1,mid+1,r,L,R,a,b);return ret;
}
int rd(){int x=0;char c;do c=getchar();while(!isdigit(c));do{x=(x<<1)+(x<<3)+(c^48);c=getchar();}while(isdigit(c));return x;
}
int main(){n=rd();for(int i=1;i<=n;i++)a[i].x=rd(),a[i].y=rd();build(1,1,n-1);for(int i=1;i<=n-1;i++)printf("%d ",query(1,1,n-1,i+1,n-1,a[i],a[i+1]));return 0;
}

【BZOJ4049】[Cerc2014] Mountainous landscape(线段树+凸包+二分)相关推荐

  1. UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP

    题目链接 UOJ #7 题解 首先这一定是DP!可以写出: \[f[i] = \min_{ancestor\ j} \{f[j] + (d[j] - d[i]) * p[i] + q[i]\}\] 其 ...

  2. HDU 6070 Dirt Ratio(线段树、二分)

    http://acm.hdu.edu.cn/showproblem.php?pid=6070 题解 首先不难看出错误率是单调的,那么我们可以直接二分答案x,某个区间的错误率=区间数的种类cnt/区间长 ...

  3. BZOJ.4552.[HEOI2016/TJOI2016]排序(线段树合并/二分 线段树)

    题目链接 对于序列上每一段连续区间的数我们都可以动态开点建一棵值域线段树.初始时就是\(n\)棵. 对于每次操作,我们可以将\([l,r]\)的数分别从之前它所属的若干段区间中分离出来,合并. 对于升 ...

  4. CodeForces - 487B Strip(线段树+dp+二分)

    题目链接:点击查看 题目大意:给出一个长度为 n 的序列,现在要求分成尽可能少的子段,且每个子段需要满足: 最大值与最小值的差值小于等于 s 子段长度大于等于 l 题目分析:dp[ i ] 代表的是前 ...

  5. [APIO2018] New Home 新家(线段树,二分答案,离散化)

    [APIO2018] New Home 新家 Solution 对于时间轴我们直接离散化+扫描线,维护每一个商店的加入和删除. 对于询问(x,t)(x,t)(x,t),不好直接回答,这里的关键一步是: ...

  6. bzoj5077: [Ctsc2016]时空旅行【线段树+凸包】

    Description 2045年,人类的技术突飞猛进,已经找到了进行时空旅行的方法.小R得到了一台时空旅行仪,他想用它调查不同 时空中人类的发展状况.根据平行时空理论,宇宙中存在着很多独立的时空,每 ...

  7. 【uoj】198:【CTSC2016】时空旅行-dfs序线段树凸包

    传送门:uoj198 题解 y,z坐标无用. 先化简一下式子,假设选择的是第iii个星球,其x" role="presentation" style="posi ...

  8. [CTSC2016]时空旅行(线段树+凸包)

    应该是比较套路的,但是要A掉仍然不容易. 下面理一下思路,思路清楚了也就不难写出来了. 0.显然y,z坐标是搞笑的,忽略即可. 1.如果x不变,那么直接set即可解决. 2.考虑一个空间和询问x0,通 ...

  9. 【BZOJ4552】【TJOI2016HEOI2016】排序(线段树、二分)

    Description 在2016年,佳媛姐姐喜欢上了数字序列. 因而他经常研究关于序列的一些奇奇怪怪的问题,现在他在研究一个难题,需要你来帮助他. 这个难题是这样子的: 给出一个1到n的全排列,现在 ...

  10. bzoj5308[Zjoi2018]胖(线段树,二分,st表)

    Description Cedyks是九条可怜的好朋友(可能这场比赛公开以后就不是了),也是这题的主人公. Cedyks是一个富有的男孩子.他住在著名的ThePLace(宫殿)中. Cedyks是一个 ...

最新文章

  1. 敏捷转型历程 - Sprint3 回顾会
  2. 《深度探索C++对象模型》--1 关于对象
  3. 工业交换机为什么需要进行高低温检测?
  4. 请领导批阅文件怎么说_请领导吃饭,不要对外说,职场员工为何如此保密?
  5. 【数据仓库】——星型模型和雪花模型
  6. 机器学习基础(二十八) —— 数据规格化
  7. mysql query generator_mybatis generator生成连接mysql与sqlserver的区别
  8. 学生管理系统(C语言)简单版
  9. 按键精灵执行cmd命令_如何用cmd运行按键精灵脚本
  10. 如何快速将多个文件合并为一个文件?
  11. 机器学习——神经网络(三):线性神经网络
  12. 【项目跟进】如何写PPT
  13. 百词斩秋招java,成都百词斩2018web前端秋招笔试题
  14. StellarWP 收购 LearnDash 学习管理系统
  15. 项目难做,程序员难当,软件开发中的 9 大难题
  16. MySQL内置函数中的日期和时间函数详解
  17. 什么是软件可靠性测试?
  18. 淘宝神话-one piece 般的十年
  19. 毫无表情的扑克脸——德扑10大基本攻守策略
  20. org.activiti.engine.ActivitiIllegalArgumentException: inputStream for resource '**' is null 的解决办法

热门文章

  1. 【爬虫实战】7基础Python网络爬虫——淘宝商品比价定向爬虫(MOOC学习笔记)
  2. 深度卷积神经网络最新进展综述
  3. Modeling and Enhancing Low-Quality Retinal Fundus Images
  4. 后退N帧协议中发送窗口的尺寸大小
  5. 血与荣耀(第七章-战鼓)
  6. Zencart模板结构和设计详解
  7. 计算机毕业设计ssm鹊巢大连分公司分销商管理系统51g9m系统+程序+源码+lw+远程部署
  8. wpsppt页面卷曲在哪里_用PPT制作页面卷角效果,你会吗?
  9. linux 下perl离线包下载
  10. 面向对象基础9(继承与继承语法)