wqs二分

题解:

室友教了一波wqs二分

发现还是很神奇的

先介绍一下这个算法

首先我们建立直角坐标系

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

纵坐标代表花费的价值

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

并且其导数是单调不降的

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

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

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

举个例子 bzoj2654

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

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

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

另一个例子是 bzoj5311

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

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

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

这样做就可以了

但为什么这样是对的

是因为我们保证了

首先最优显然是分n段

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

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

 

posted @ 2018-05-11 00:35  尹吴潇  阅读(1122)  评论(0编辑  收藏  举报