zoukankan      html  css  js  c++  java
  • wqs二分

    题解:

    室友教了一波wqs二分

    发现还是很神奇的

    先介绍一下这个算法

    首先我们建立直角坐标系

    横坐标代表白色的边的数目

    纵坐标代表花费的价值

    那么我们会发现从中间某个最小的点开始向两边递增

    并且其导数是单调不降的

    那么我们考虑一条直线,当它与我们需要的这个相切的时候

    这条直线在过这个点时在y轴上的截距一定是所有点中最小的

    并且,我们会发现与y轴的交点比当前点的y坐标高了-k*x个

    举个例子 bzoj2654

    这样的话也就是说我们要使得原先的答案+用白边的数目(即x坐标)*-k  最小

    这样就直接对每条白边-k就可以了

    那么这个东西显然可以二分

    另一个例子是 bzoj5311

    这道题感觉可以扩展到其他题目

    我们可以对k段建x轴,花费建y轴

    然后每使用一次操作,花费-k代价

    这样做就可以了

    但为什么这样是对的

    是因为我们保证了

    首先最优显然是分n段

    然后随着分段的减少,答案增加的速度显然是不降的

    否则如过降了我之前就可以只增加这么点(如果用了上一次合成的那这一次也一定会更多)

  • 相关阅读:
    SQL 通配符
    正则表达式
    与运算(&)、或运算(|)、异或运算(^)、右移运算符(>>>)本质介绍
    博客园博客目录自动生成(页面目录)
    Linux查看并杀死被占用的端口
    Eclipse的环境配置
    L-Rui
    Web页面弹出窗口代码大全
    linux-用户
    linux-网络
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9022552.html
Copyright © 2011-2022 走看看