zoukankan      html  css  js  c++  java
  • 「不会」二维凸包

        Boboqqq说,总结必须要写啊。

        

        求静态凸包有两种方法,一种是按横坐标排序,

        另一种是先选定一个起点,然后按其它点关于这个点的方向排序

        前一种可以直接单调栈解决,但是一次只能跑出半个凸包,

        后一种可以一次求出一个完整的闭合凸包

        解决动态凸包问题有两种方法,一种是cdq分治+归并排序

        另一种是平衡树二分斜率,用set其实很方便了就是慢

        

        判断凸性的时候,一种方法是比较斜率

        在第一象限没啥问题,但是到了别的象限就不是很对了

        所以skyh教我向量叉乘,$a×b=ax*by-ay*bx$,矢量

        在第一象限,它和$k_b-k_a$同号,所以也是很直观的工具

        

        最大化一个表达式$f(i)$但其含有i和j的次数都不为0的项时,

        应当考虑使用凸包(斜率优化)

        $f(i)=f_1(i)+f_2(j)+f_3(i,j)$

        第一项看作常数,则需要最大化第二三项,我们要维护出所有可能成为决策点的j

        通过运作得到形式如下等式:$y(j)=k(i)*x(j)+b(i)$,其中要f与b有确定的符号关系

        则可以通过最大/小化b来实现最大化f

        将每个j表示为坐标上一个点$(x(j),y(j))$之后,

        考虑所有情况下出现的i,决策点一定处于j的集合的凸包上,因为b体现于$(x,y)$的直线在y轴上的截距

        然后维护这个凸包,每次询问i时用i的$k(i)$二分寻找最值

        

        「旅行规划」

          前缀和之后,修改操作变成了加上一个等差数列

          对于一个被完全覆盖的区间$[L,R]$,原本求$Si$的最大值变为求$Si+(i-L+1)*q$,q为公差的最大值

          为了保证复杂度,初始的$Si$不应是经常变动的,而应努力使不变$Si$的情况下也能对每个q维护出最值

          $ans=max(Si+i*q) -> Si=-q*i-ans$,每次询问拿目前的q的相反数去凸包上找最小截距,找到的点即可用来更新ans

          以及分块

        「防线修建」

          离线,题目帮忙省了一些边界的处理

        「购票」

          $f_i=f_j+p_i*(d_i-d_j)+q_i$,$f_j=(f_i-q_i-p_i*d_i)+p_i*d_j$

          可以看出是斜率优化,如果是序列问题直接动态凸包就好了

          可是是树上问题,所以加上一个链栈就好了,每次递归只会改变栈顶位置和该位置元素,

          每次回溯改回去就行了

          可是还有L的限制,所以用树状数组套单调栈,每次询问区间的并就行了

          

          不会树状数组的话也可以点分治。。。

          每棵分治树都统计重心及其父链对重心的所有儿子的子树的贡献,要先递归到父亲方向子树。

        「货币兑换」

          $f(i)=max(A_ia_j+B_ib_j)$

          $b_j=-frac{A_i}{B_i}a_j+frac{f(i)}{B_i}$

        「妖怪」

          和货币兑换差不多,但是用动态凸包怎么也过不去,排序后用单调栈求凸包来才过了。

        「陶陶的难题II」

          为什么没想到在最外层二分答案搞01分数规划,一直想在最里层二分

          不把xy和pq搞开就司路易条。

          复杂度为$nlog线段树+m询问数*log二分答案*log^2节点*log凸包=nlog^4n$

        「向量集」

          $4e5 nlog^2n$能过$3s$,

          于是这题变成了购票的弱化版

  • 相关阅读:
    mysql启动报错:Another MySQL daemon already running with the same unix socket.
    DRBD编译安装中出现的问题及解决小结
    DRBD+Heartbeat+Mysql高可用环境部署
    LVS三种包转发模型调度算法
    nagios环境部署(rhel6.5)
    reorder-list
    二叉树的前序遍历(不用递归)
    最大正方形
    名字的漂亮度
    计算字符个数
  • 原文地址:https://www.cnblogs.com/yxsplayxs/p/12166560.html
Copyright © 2011-2022 走看看