$$AVICII$$

凸包

一般形式是$y=k*x+z$,找到合适的$z$,于是维护一个凸包的点集。

一般不判斜率,而算叉积。

套路,斜率单调性或点集单峰性,数据结构瞎套一套就好了。

叉积如果暴long long,开long double

刷题表:

A. 陶陶的难题II:

要学一个东西叫01分数规划。

二分答案$ans\leq \frac{y_i+q_j}{x_i+p_j}$,然后变成判定问题。

化成$(y_i-ans*x_i)+(q_j-ans*p_j)\geq 0$,使$(x,y)$和$(p,j)$无关,分别凸包求最大值。

如果在序列上,可以线段树维护凸包,树上套个树链剖分。

二分一个,树链剖分两个,找到区间三分一个,一共四个$log$。。。

B. 旅行规划:

问题是维护区间查询前缀最大值,区间加。

用分块维护,对于每个块维护等差数列,在每个块内三分。

设首项为$fi$,公差为$se$。

$fi+se*(pos-l)+y=z$

$y=-fi-se*pos+se*l+z$

所以可以块维护凸包三分。

修改时对于边界暴扫的块再暴力重新建栈。

时间复杂度$O(n*sqrt(n)*log(n))$

C. 妖怪:

柿子:$\max({x+\frac{a*y}{b}+y+\frac{b*x}{a}})$

非正解(会被卡常):

设$t=\frac{a}{b}$

$x+y*t+y+\frac{x}{t}$

二分答案.

$(x+y-z)*t+y*t*t+x\leq 0$

变成高考数学,检验所有解集是否有交集即可。

正解:

对于每对$(x,y)$都是单峰函数,合起来也是单峰函数,就可以三分。

D. 向量集:

线段树维护凸包板子。

E. 防线修建:

动态维护凸包,可以写$set$

F. 货币兑换Cash:

首先提示的结论是可以证的,不太难想,如果当前决策是买券,那么一定要在之前的所有时刻尽可能多得把钱换成券。

然后$n^2dp$就有了。

然后可以$cdq$维护凸包,也可以$splay$二分斜率。

G. 购票:

$n^2dp$是比较好写的。

然后化完柿子发现可以维护凸包,但并不能只搞一个单调栈一遍$dfs$。

因为有个距离限制,某些已经被弹栈的点在距离限制下的点集中可能会在凸包上。

开始写树剖,注意线段树区间查询时要在区间全都合法的情况下再三分。

posted @ 2020-01-09 07:52  bootpuss  阅读(207)  评论(0编辑  收藏  举报