
计算几何-凸包
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 1007 [HNOI2008]水平可见直线
最后所有可见直线形成的,一定是类似下凸壳的东西,从左到右斜率递增。将所有直线按照斜率从小到大排序,依次遍历分情况入栈。一条直线会把前一条直线覆盖,当且仅当该直线斜率比前一条直线大(排序后一定满足),且直线在栈中前两条直线的交点之上。这样也就是在维护一个下凸壳。#include<cstdio> #include<algorithm> #include<cmath> #define MAXN 50005原创 2016-08-01 12:34:44 · 298 阅读 · 0 评论 -
BZOJ 1185 [HNOI2007]最小矩形覆盖
凸包+旋转卡壳结论:一个凸包的最小矩形覆盖一定有一条边在凸包上证明?打表/对拍证明吧。。。(反正我不会证,为什么都说它是显而易见的?)然后跑凸包,枚举边,旋转卡壳找点搞一搞就好了#include<cmath> #include<cstdio> #include<algorithm> #define calc(a,b,c) cross(p[b]-p[a],p[c]-p[a]) #define N 50原创 2016-09-29 15:19:30 · 356 阅读 · 0 评论 -
UOJ 88 [集训队互测2015]Robot
线段树分治套凸包每个机器人在多次修改之间的贡献是不同的,因为这个一次函数被修改。显然要线段树分治。我们需要在线段树上维护凸壳,刚开始我以为要用动态凸包的那套理论。后来才知道直接在外面给所有一次函数排序,做凸壳就能是线性的了。。。我真智障#include<cstdio> #include<algorithm> #define N 500005 #define cmax(u,v) (u)<(v)?(u)原创 2016-12-31 22:47:46 · 753 阅读 · 0 评论 -
UOJ 205 [APIO2016]Fireworks
可并堆+凸包首先猜一个结论,这玩意儿的函数是下凸的,进一步再猜这玩意儿是一个连续的分段一次函数,来证明一发。要证明一个子树的函数是下凸的分段一次函数,只需证明 ①所有子树加上父边之后还是下凸的分段一次函数 ②加上父边的子树合并起来还是下凸的分段一次函数 这两个显然正确(强行偷懒),详见WMD的题解《Firework》然后。。。看代码吧 #include<cstdio> #include<alg原创 2017-02-13 19:12:57 · 817 阅读 · 0 评论