Portal --> broken qwq

Solution

​  所以我不是很懂为什么我场上想到了凸包的解法但是。。老想着。。要整体处理==有毒

​  一开始。。自己进入了一个误区就是老想着要求交点

​​  但是很显然求交点你就凉了,所以我们要转化问题

​​  我们把橙黄色的那条线画出来,然后就发现。。其实我们是可以很方便地判断一段线段(\(P_3P_4\)),在某一个区间里面有没有解,具体的话就是。。我们维护这个区间的上凸包,然后判断一下这条线跟是否与这个上凸包相交就好了

​​  那然后就直接。。线段树维护每个区间的上凸包。。然后直接在线段树上查答案就ok了然后记得优先左儿子。。时间复杂度\(O(nlog^2n)\)

​  

​  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int N=1e5+10,SEG=N*4;
const double eps=1e-6;
struct Dot{double x,y;Dot(){}Dot(double _x,double _y){x=_x; y=_y;}
}a[N];
bool slope_dec(int x,int y,int i){return (a[x].y-a[y].y)*(a[y].x-a[i].x)>(a[y].y-a[i].y)*(a[x].x-a[y].x);}
void line(int x,int y,double &k,double &b){k=(a[x].y-a[y].y)/(a[x].x-a[y].x);b=a[x].y-k*a[x].x;
}
bool k_bigger(int x,int y,double k){if (a[y].x>a[x].x) swap(x,y);return (a[x].y-a[y].y)>k*(a[x].x-a[y].x);
}
int n,ans;
namespace Seg{/*{{{*/int ch[SEG][2],top[SEG];vector<int> rec[SEG];int n,tot;double k,b;void _build(int x,int l,int r){rec[x].resize(r-l+3); top[x]=0;for (int i=l;i<=r+1;++i){while (top[x]>1&&!slope_dec(rec[x][top[x]-1],rec[x][top[x]],i)) --top[x];rec[x][++top[x]]=i;}rec[x].resize(top[x]+1);if (l==r) return;int mid=l+r>>1;ch[x][0]=++tot; _build(ch[x][0],l,mid);ch[x][1]=++tot; _build(ch[x][1],mid+1,r);}void build(int _n){n=_n; tot=1; _build(1,1,n);}int check(int x){int l=1,r=top[x]-1,mid,tmp1,tmp2,ans=r;while (l<=r){mid=l+r>>1;tmp1=rec[x][mid];tmp2=rec[x][mid+1];if (k_bigger(tmp1,tmp2,k)) ans=mid,l=mid+1;else r=mid-1;}tmp1=rec[x][ans+1];if (k*a[tmp1].x+b+eps<=a[tmp1].y) return tmp1-1;else return 0;}int _query(int x,int l,int r,int lx,int rx){int mid=lx+rx>>1,tmp;if (l<=lx&&rx<=r){if (lx==rx) return check(x);if (!check(x)) return 0;if (check(ch[x][0]))return _query(ch[x][0],l,r,lx,mid);return _query(ch[x][1],l,r,mid+1,rx);}if (r<=mid)return _query(ch[x][0],l,r,lx,mid);else if (l>mid)return _query(ch[x][1],l,r,mid+1,rx);else{tmp=_query(ch[x][0],l,mid,lx,mid);if (tmp) return tmp;return _query(ch[x][1],mid+1,r,mid+1,rx);}}int query(int l,int r,double k1,double b1){k=k1; b=b1;return _query(1,l,r,1,n);}void _debug(int x,int lx,int rx){printf("#%d %d: ",lx,rx);for (int i=1;i<=top[x];++i) printf("%d ",rec[x][i]);printf("\n");if (lx==rx)  return;int mid=lx+rx>>1;_debug(ch[x][0],lx,mid);_debug(ch[x][1],mid+1,rx);}void debug(){_debug(1,1,n);}
}/*}}}*/int main(){
#ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);
#endifdouble k,b;scanf("%d",&n);for (int i=1;i<=n;++i)scanf("%lf%lf\n",&a[i].x,&a[i].y);Seg::build(n-1);//Seg::debug();for (int i=1;i<n;++i){ans=0;if (i<=n-2){line(i,i+1,k,b);ans=Seg::query(i+1,n-1,k,b);}printf("%d ",ans);//Seg::debug();printf("\n");}
}

转载于:https://www.cnblogs.com/yoyoball/p/9552444.html

Mountainous landscape相关推荐

  1. 一步步指导 AI 画一幅中国山水画

    在 「AI 作画第二弹」这篇文章中,我给大家介绍了 AI 作画工具在 Linux 系统上的部署.如果对 Linux 系统不熟,或者显卡比较低端,也可以考虑一些在线网站.国内比较好的网站有: 文心一格 ...

  2. Android :landscape||portrait 切换

    可在AndroidManifest.xml里面配置屏幕发现. 在<Activity>中加入这一行android:screenOrientation="landscape/port ...

  3. System Landscape Recommendations for SAP Customer Activity Repository

    System Landscape Recommendations for SAP Customer Activity Repository 该PDF文件可以在如下链接里下载: System Lands ...

  4. Great Power, Great Responsibility: The 2018 Big Data AI Landscape

    http://mattturck.com/bigdata2018/ It's been an exciting, but complex year in the data world. Just as ...

  5. 动态更改屏幕方向LANDSCAPE与PORTRAIT 转

    动态更改屏幕方向--LANDSCAPE与PORTRAIT package irdc.ex05_22; import android.app.Activity; import android.conte ...

  6. CERC17 Problem L - Lunar Landscape(差分,坐标系)

    CERC17 Problem L - Lunar Landscape Solution 如果只有AAA,我们可以简单地使用差分解决. 加入了BBB之后,可以把单位正方形用对角线拆成四个等腰Rt,统计等 ...

  7. landscape 1

    1. 创建出landscape的分层材质 2. 把材质添加给landscape后,可以在landscape的画刷模式下看到 3. 通过点击右侧的加号,依次添加layer后,就可以使用他们进行地形的绘制 ...

  8. hexo需要先编辑好html文件吗,教你定制Hexo的landscape打造自己的主题_html/css_WEB-ITnose...

    我敢肯定大家不仅想拥有自己的博客,还想有一套自己的主题.目前Hexo的主题多数都是从官方主题landscape修改而成的,然而别人能修改,你也可以修改,就算你不会编程,不会web前端,跟着我做你一样可 ...

  9. CNCF landscape 云原生 敏捷开发

    CNCF landscape 敏捷价值观和原则的开发方法包括: 极限编程(XP),Scrum,精益软件开发(Lean Software Development),动态系统开发方法(DSDM),特征驱动 ...

  10. 能量景观(Energy landscape)

    文章目录 1. 简介 2. 应用 3. 正式定义 3.1 宏观例子 1. 简介 图 世界社会经济系统的简化能量景观,和不同细节层次的社会倾斜的动态(social tipping dynamics),突 ...

最新文章

  1. 记一个开发中遇到react-native flatList 的坑
  2. Truncate 删除数据
  3. 全球及中国认知文档处理行业运营策略与应用前景分析报告2022版
  4. script到底应该放在哪里
  5. 运算放大器基本公式_运算放大器 - 产生的背景和解决的问题
  6. AcWing 312. 乌龟棋
  7. java 动态获取IP地址(城市)
  8. HTTP请求和数据安全
  9. 如果苹果公司允许其他手机厂商使用iOS系统,对苹果公司来说会有什么好处?
  10. java中的关键字有哪些_java关键字有哪些?java关键字大全
  11. 左程云 Java 笔记--二叉树
  12. graphpad数据小数点_Image J和Graphpad如何对Western Blot条带灰度分析【干货】 | 每日生物评论...
  13. 2022物联网工业互联网
  14. python里面snip什么意思_文献检索里面SJR是什么,SNIP指标是什么
  15. 用到Linux的命令的总结(持续更新)
  16. 华为路由器可以连接几个设备_华为如何设置连接两个无线路由器
  17. Android指纹解锁
  18. 微软 Teams 可以排排坐了~~ C位你要不要?
  19. mySQL数据库01
  20. 因果推理(causal inference)中的ATT和ATE有什么区别?

热门文章

  1. 极简桌面 android 2.3,低端 Android 备机的轻量级启动器:极简光速桌面
  2. vue-element-admin基础学习
  3. san分布式共享文件系统_SAN存储区域网络共享软件全攻略
  4. 明源售楼系统技术解析(三)付款定义新增、修改、删除
  5. 黑客知识之7种DoS攻击方法简述
  6. AtCoder Beginner Contest 162 D RGB Triplets 前缀和
  7. C语言中格式输出二进制的两种方法
  8. java如何输入(输出)二进制,八进制,十六进制数?(新手向)
  9. 机械键盘轴体(红轴、茶轴、黑轴、青轴)
  10. Ubuntu下载常用软件和使用Caffe时的常见问题