• wqs二分


    题解:

    室友教了一波wqs二分

    发现还是很神奇的

    先介绍一下这个算法

    首先我们建立直角坐标系

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

    纵坐标代表花费的价值

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

    并且其导数是单调不降的

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

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

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

    举个例子 bzoj2654

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

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

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

    另一个例子是 bzoj5311

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

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

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

    这样做就可以了

    但为什么这样是对的

    是因为我们保证了

    首先最优显然是分n段

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

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

  • 相关阅读:
    LaTex 2
    Haskell语言练习
    TypeScript语言学习笔记(2)接口,类
    正则表达式(TypeScript, JavaScript)
    Angular2学习笔记
    Haskell语言学习笔记(71)Semigroup
    正则表达式(Kotlin)
    TypeScript语言学习笔记(1)基本类型,变量声明
    Kotlin语言编程技巧集
    多线程(Java)
  • 原文地址:https://www.cnblogs.com/yinwuxiao/p/9022552.html
Copyright © 2020-2023  润新知