首页 > 其他分享 >wqs 二分

wqs 二分

时间:2022-12-01 11:24:37浏览次数:75  
标签:二分 wqs 选择 斜率 link 答案

更应该说是一种思想吧。

我们希望知道恰好选择 \(k\) 个物品时的答案,但世界上哪来的那么多恰好呢。令 \(f_x\) 是恰好选择 \(k\) 个物品时的答案,那么点集 \((x,f_x)\) 常会形成一个凸包,于是要知道特定 \(x\) 的答案,就只需要二分出这个点的斜率,然后用截距加上横坐标乘斜率即可,这个过程就是 wqs 二分,而求最优截距的方法是多样的,下面会说。其中有许多需要注意的细节,比如连着几个值斜率相同(其实没关系,反正最后求出来的答案是一样的)。另外精度也是一个需要考虑的问题。一般用下面这种写法:

while(l<r){
	mid=(l+r>>1)+1;solve(mid);
	if(g[1].num>=n)ans=g[1].data+n*mid,l=mid;else r=mid-1;
	if(g[1].num==n)break;
}

最后出来的 \(ans\) 就是我们想要的。其它的倒是没什么了,具体看题。

Akvizna link 忽略轮数的限制,用 \(f_x\) 代表还剩 \(x\) 个人的最大收益。于是有 \(f_x=\max\limits_{i=0}^{x-1}(f_i+\frac{i-j}{i})\),可以拆成斜率优化的形式。推出柿子之后直接 wqs 二分即可,然后似乎要注意精度。

CF739E link 猜测答案在两个维度上都是凸包形式,所以可以二分套二分。检查的过程就变成了对于一个物品,用红球有 \(p_A-c_A\) 的贡献,用蓝球有 \(p_B-c_B\) 的贡献,两个都用有 \(p_{A\&B}-c_A-c_B\) 的贡献,选择一个希望最大化总贡献,贪心即可,途中记录两种球各用几次。有些卡精度,应当在当前数量等于希望数量时及时推出。

aliens link 经典的题目。把右上的点翻到左下,消除那些对答案不产生影响的点,剩下的点会形成一个锯齿一样的形状,每个点映射到对角线上会有一个区间 \([l_i,r_i]\)。但由于多次选择的区间只会被计算一次,所以方程会稍微复杂一点(一开始以为要多次计算,调了半天才反应过来,毕竟那种思路下根本无法形成凸包)。内部还是用的斜率优化。

忘情 link 和上一道题本质上差不多。柿子题。

林克卡特树 link 转化问题。把树拆成 \(k\) 部分,然后要最大化连接起来后的答案,就贪心地选择每个部分中的直径。于是问题就变成了在树上选择 \(k+1\) 条不相交的链。因为所以这玩意是上凸的,所以采用 wqs 二分。用 \(f_{x,0/1/2}\) 代表这个点当前度数为多少时的最优值,考虑转移。用 \(g_x\) 代表 \(x\) 子树内的答案(也就是到父亲那条边不选),于是有

\[\begin{aligned} f_{x,0}&=f_{x,0}+g_y\\ f_{x,1}&=\max(f_{x,1}+g_y,f_{x,0}+f_{y,1}+e)\\ f_{x,2}&=\max(f_{x,2}+g_x,f_{x,1}+f_{y,1}+e+p) \end{aligned} \]

其中每个值都要记录两维,即答案和选择的链的数量。最后看 \(g_{root}\) 选择了几条链并更新左右端点即可。

CF802O link 运用到了 wqs 二分思想的题目。因为所以它是一个凸包,然后就可以用 wqs 二分了。考虑内部如何检查,这里用到了反悔 DP 的思想。考虑一个点作为结束时间时选择谁作为开始时间。如果选择一个没有被选择过的 \(a_y\),那么由于当前是一个新的决策,所以贡献是 \(b_x+a_y-v\)。如果是顶替掉之前的某个决策,那么贡献的变化值就是 \(b_x-b_y\),所以动态维护 \(a_y-v\) 和 \(-b_y\) 的最小值并记录第一种决策做了多少次即可。一只 \(\log\)。

标签:二分,wqs,选择,斜率,link,答案
From: https://www.cnblogs.com/Feyn/p/16940843.html

相关文章

  • 双栈排序——二分图+模拟
    二分图建模-双栈排序题目描述Tom最近在研究一个有趣的排序问题。如图所示,通过\(2\)个栈\(S_1\)和\(S_2\),Tom希望借助以下\(4\)种操作实现将输入序列升序排序。......
  • 洛谷 P1387 最大正方形(前缀和,二分)
    题目分析当一个边长为x的正方形不包含0时,这个正方形内的二维前缀和为x*x,题目想求满足条件的最大的正方形的边长假如最大的正方形的边长为ans,那么凡是边长大于ans的正方形......
  • 二分浅入
    二分前言仅看要点不是很能理解,主要是看示例要点总结复习用要点关注范围,需要的是\([left,right]\)还是\([left,right)\)定义最后\(l\)和\(r\)落点位置是什么根......
  • 拓端tecdat|R语言代码编写对二分连续变量进行逻辑回归数据分析
    R语言对二分连续变量进行逻辑回归数据分析​教育或医学的标准情况是我们有一项连续的措施,但随后我们对那些具有临床/实践意义的措施有了切入点。一......
  • 二分查找
    二分查找:请对一个有序数组进行二分查找{1,8,10,89,1000,1234},输入一个数看看该数组是否存在此数,并且求出下标,如果没有就提示"没有这个数"。二分查找思路二分查......
  • ACM预备队-week5(DFS/BFS/二分图)
    [蓝桥杯2013国C]危险系数题目链接:P8604[蓝桥杯2013国C]危险系数-洛谷|计算机科学教育新生态(luogu.com.cn)割点:删除这个顶点集合以所有顶点相关联的边以......
  • 二分查找-LeetCode704 简单题
    LeetCode代码链接:https://leetcode.cn/problems/binary-search/题目:给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的t......
  • 二分查找总结
    二分查找二分查找也常被称为二分法或者折半查找(BinarySearch),每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为O(n) ......
  • LOJ #6044 题解——完全二分图的生成树计数
    LOJ#6044显然就是要求有多少左边有\(K\)个点,右边有\(N-K\)个点的完全二分图的生成树个数,但是我不会!所以我们想一想怎么算左边\(n\)个点,右边\(m\)个点的完全二分......
  • 整数二分查找
    总的来说使用二分的条件:具有单调性注意:二分的思想看似简单,但其实很容易出错整数二分模板以单调递增序列的二分为例给出两个模板:在单调递增序列中找到x或x的后继(大于......