题解:
室友教了一波wqs二分
发现还是很神奇的
先介绍一下这个算法
首先我们建立直角坐标系
横坐标代表白色的边的数目
纵坐标代表花费的价值
那么我们会发现从中间某个最小的点开始向两边递增
并且其导数是单调不降的
那么我们考虑一条直线,当它与我们需要的这个相切的时候
这条直线在过这个点时在y轴上的截距一定是所有点中最小的
并且,我们会发现与y轴的交点比当前点的y坐标高了-k*x个
举个例子 bzoj2654
这样的话也就是说我们要使得原先的答案+用白边的数目(即x坐标)*-k 最小
这样就直接对每条白边-k就可以了
那么这个东西显然可以二分
另一个例子是 bzoj5311
这道题感觉可以扩展到其他题目
我们可以对k段建x轴,花费建y轴
然后每使用一次操作,花费-k代价
这样做就可以了
但为什么这样是对的
是因为我们保证了
首先最优显然是分n段
然后随着分段的减少,答案增加的速度显然是不降的
否则如过降了我之前就可以只增加这么点(如果用了上一次合成的那这一次也一定会更多)