首先对于一个给定的图形,要找到是否存在答案非常简单。。。

只要维护当然图形的凸包,看一下是否有线段在这条直线上方,直接二分即可,单次询问的时间复杂度$O(logn)$

现在用线段树维护凸包,即对于一个区间$[l, r]$,我们维护点$[P_l, P_{r +1}]$形成的凸包

于是每次查询只要在线段树上二分,总复杂度$O(nlogn + nlog^2n)$(建树 + 查询)

  1 /**************************************************************
  2     Problem: 4049
  3     User: rausen
  4     Language: C++
  5     Result: Accepted
  6     Time:5052 ms
  7     Memory:73960 kb
  8 ****************************************************************/
  9
 10 #include <cstdio>
 11 #include <vector>
 12
 13 using namespace std;
 14 typedef long long ll;
 15 const int N = 1e5 + 5;
 16
 17 int read();
 18
 19 int n;
 20
 21 struct point {
 22     int x, y;
 23     point(int _x, int _y) : x(_x), y(_y) {}
 24     point() {}
 25
 26     inline point operator + (const point &p) const {
 27         return point(x + p.x, y + p.y);
 28     }
 29     inline point operator - (const point &p) const {
 30         return point(x - p.x, y - p.y);
 31     }
 32     inline ll operator * (const point &p) const {
 33         return 1ll * x * p.y - 1ll * y * p.x;
 34     }
 35
 36     inline void get() {
 37         x = read(), y = read();
 38     }
 39
 40     friend inline ll calc(const point &a, const point &b, const point &c) {
 41         return (a - b) * (c - b);
 42     }
 43 } p[N];
 44
 45 struct convex {
 46     vector <point> s;
 47
 48     inline void clear() {
 49         s.clear();
 50     }
 51     #define top ((int) s.size() - 1)
 52     inline void insert(const point &p) {
 53         while (top > 0 && calc(p, s[top - 1], s[top]) <= 0) s.pop_back();
 54         s.push_back(p);
 55     }
 56
 57     #define mid (l + r >> 1)
 58     inline bool query(const point &p, const point &q) {
 59         int l = 0, r = top - 1;
 60         while (l < r) {
 61             if (calc(s[mid], p, q) < calc(s[mid + 1], p, q)) r = mid;
 62             else l = mid + 1;
 63         }
 64         return calc(s[l], p, q) < 0 || calc(s[l + 1], p, q) < 0;
 65     }
 66     #undef mid
 67     #undef top
 68 };
 69
 70 struct seg {
 71     seg *ls, *rs;
 72     convex c;
 73
 74     #define Len (1 << 16)
 75     inline void* operator new(size_t, int f = 0) {
 76         static seg mempool[N << 2], *c;
 77         if (f) c = mempool;
 78         c -> ls = c -> rs = NULL, c -> c.clear();
 79         return c++;
 80     }
 81     #undef Len
 82
 83     #define mid (l + r >> 1)
 84     void build(int l, int r) {
 85         int i;
 86         for (i = l; i <= r + 1; ++i) c.insert(p[i]);
 87         if (l == r) return;
 88         (ls = new()seg) -> build(l, mid);
 89         (rs = new()seg) -> build(mid + 1, r);
 90     }
 91
 92     int query(int l, int r, int L, int R, const point &p, const point &q) {
 93         if (R < l || r < L) return 0;
 94         if (L <= l && r <= R) {
 95             if (!c.query(p, q)) return 0;
 96             if (l == r) return l;
 97         }
 98         int res = ls -> query(l, mid, L, R, p, q);
 99         return res ? res : rs -> query(mid + 1, r, L, R, p, q);
100     }
101     #undef mid
102 } *T;
103
104 int main() {
105     int Tmp, i;
106     for (Tmp = read(); Tmp; --Tmp) {
107         n = read();
108         for (i = 1; i <= n; ++i) p[i].get();
109         (T = new(1)seg) -> build(1, n - 1);
110         for (i = 1; i < n - 1; ++i)
111             printf("%d ", T -> query(1, n - 1, i + 1, n - 1, p[i], p[i + 1]));
112         puts("0");
113     }
114     return 0;
115 }
116
117 inline int read() {
118     static int x;
119     static char ch;
120     x = 0, ch = getchar();
121     while (ch < '0' || '9' < ch)
122         ch = getchar();
123     while ('0' <= ch && ch <= '9') {
124         x = x * 10 + ch - '0';
125         ch = getchar();
126     }
127     return x;
128 }

View Code

转载于:https://www.cnblogs.com/rausen/p/4528869.html

BZOJ4049 [Cerc2014] 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. 零基础入门学习Python(14)-格式化字符串
  2. 实体识别+entity resolution
  3. Ubuntu 16.04 amd64 bond mode6 配置
  4. MooTools教程(1):认识MooTools
  5. cursor的moveToNext()与moveToFirst()
  6. swoole学习(一)----linux安装swoole
  7. java8 lambda 接口_Java8新特性之一:Lambda表达式
  8. Question for recommendation system, which is a baseline
  9. TP5安装失败怎么办?
  10. 深度学习:优化器工厂,各种优化器介绍,numpy实现深度学习(一)
  11. Struts知识问答
  12. cvMat结构体详解
  13. [SDOI2011]打地鼠
  14. HDU 1556 Color the ball 线段树
  15. 我们怎么样把pdf格式转换成dwg格式呢
  16. Jmeter小程序压力测试案例
  17. Zepto中touch模块的使用(移动端)
  18. Windows10的右键菜单添加“管理员取得所有权”
  19. 第13节 eclipse简介
  20. 虚地址到实地址的翻译过程

热门文章

  1. 华为公有云,一个关于天分与勤奋的故事
  2. html写樱花树,写樱花树的作文
  3. CAPM模型和Alpha策略
  4. Excel文档瘦身,一键压缩xlsx文件中所有的图片,解决excel文件太大的问题
  5. python网络爬虫笔记
  6. 关于JAVAFX的鼠标单击事件案例
  7. 九阴真经 正在获取服务器列表信息,九阴真经4月9日更新内容介绍_九阴真经4月9日更新公告_飞翔教程...
  8. web(Response、ServletContext)
  9. 《植物大战僵尸(PC)》游戏评测
  10. p2psear正在连接服务器,P2PSearcher无法连接到网络,也无法连接到服务器