zoukankan      html  css  js  c++  java
  • 凸包

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

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

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

    叉积如果暴long long,开long double

    刷题表:

    A. 陶陶的难题II:

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

    二分答案$ansleq 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+xleq 0$

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

    正解:

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

    D. 向量集:

    线段树维护凸包板子。

    E. 防线修建:

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

    F. 货币兑换Cash:

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

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

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

    G. 购票:

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

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

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

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

  • 相关阅读:
    Java字符串操作
    easyui Combotree根据用户输入显示对应的tree值
    maven
    引用 js表单验证大全 以后方便查看用
    对象内存模型
    高级性能服务器编程模型【IOCP完成端口】开发实现【一】
    高级性能服务器编程模型【IOCP完成端口】开发实现【二】
    高级性能服务器编程模型【IOCP完成端口】开发实现【三】
    探讨【IGE】的源代码【六】,承接【五】,内存池管理。
    hive beeline详解
  • 原文地址:https://www.cnblogs.com/2018hzoicyf/p/12167305.html
Copyright © 2011-2022 走看看