二分

概述

  • 二分法是解决如下最优化问题的利器:

    • 解具有某种意义上的单调性。例如,取值单调,或可行性单调(即可行/不可行的分别是问题边界开始的连续一段)。

    • 解不容易直接求出,但判定一个解是否合法较为容易。

  • 此时则可以二分:维护最优区间,每次判定其中点是否合法,若是则舍弃左区间,否则舍弃右区间(这里我们认为右区间更优)。

  • 二分和倍增在某种意义上互为逆。事实上,二分的一种实现就基于倍增,因为任何一个答案都可以做二进制拆分(我认为二分和倍增在某种程度上依赖着二进制的最优性...不是很好表述,因为没想清楚)。

分数规划

  • 分数规划是求分式极值的二分方法,有时也指求分式极值的问题类。具体地,给出如下分式,求其极值:

\[\sum\limits_{i=1}^n \frac{y_iv_i}{y_iw_i} \]

  • 其中 \(y=0/1\),是自选的。自然语言表述为:每种物品有两个权值 \(v\)\(w\),选出若干个物品使得 \(\frac{\sum v}{\sum w}\) 最小/最大。

  • 不妨二分之。考虑化式子,对于 \(mid\),有

\[\begin{aligned} & \dfrac{\sum\limits_{i=1}^n y_i\times v_i}{\sum\limits_{i=1}^n y_i\times w_i} > mid \\ & \to \sum\limits_{i=1}^n y_i\times v_i>\sum\limits_{i=1}^n y_i\times w_i\times mid \\ & \to \sum\limits_{i=1}^n y_i\times (v_i-w_i\times mid)>0 \end{aligned} \]

  • 当然可能有非 \(01\) 的分数规划...注意到其类似多重背包,至少可以二进制拆分。

  • 实际问题中,一般会有 \(\sum\limits_{i=1}^n y_i\times w_i\geqslant K\) 的限制。在合法性检验中捎带一下就好了。

P4377 [USACO18OPEN] Talent Show G

  • 题意略。

  • 板题,按上面的来就行。check 是一个背包,因为要背够 \(\sum\limits_{i=1}^n y_i\times w_i\)...这么一说,如果是背包 check,显然可以单调队列优化多重。

P4322 [JSOI2016] 最佳团体

  • 题意略。就是把上一题的线性 DP 推广到了树形。

P3705 [SDOI2017] 新生舞会

  • 题意略。是一个二分图最大权匹配的 check...当然我这里用了 SSP。

  • 以及,这道题比较卡常(也许是卡 SPFA?),需要调一调参才能确保时间和精度都 OK。

P1642 规划

  • 题意略。

  • 注意这是一个比较特殊的树形背包;时间很宽裕,直接枚举根做暴力 DP。

整体二分

  • 整体二分是解决如下问题的利器:

    • 多组询问,可带修,询问可二分。

    • 修改互相独立。

    • 修改不能影响合法性的判定标准。

    • 允许使用离线算法。

  • 核心思路:迫使每个操作只出现在二分树中的一条链上。

    • 具体来说,将原有的信息也视作修改,进行值域二分(二分答案)。

    • 利用值域二分将手上的修改操作变成 \(01\) 操作,按时序操作之,于是容易判定各询问在值域上是否更大。

    • 将答案 \(\leqslant mid\) 的扔到左边,反之亦然,操作根据其对值域上何处贡献也同理。显然这构成一棵二分树。

    • 对其做后序遍历,先递归左儿子,于是处理任意区间时,当前生效的修改恰为到其的前缀。注意要撤销修改。

P3834 【模板】可持久化线段树 2

  • 题意:求静态区间第 \(k\) 小。

  • 二分答案(二分值域),每次将 \(\leqslant mid\) 的点 \(ins\) 到其下标上,用树状数组维护容易求出区间 \(\leqslant mid\) 的数的个数。

  • 足够则询问向左走,否则询问向右走并减去这些数的量。双 \(\log\),常数较小。

P2617 Dynamic Rankings

  • 题意:求动态区间第 \(k\) 小。

  • 整体二分完全体的板子。我们借着这道题稍微细讲一下吧:

  • 一般的整体二分中,我们二分出当前值域中点 \(mid\) 之后,遍历所有操作,看情况执行(按 \([\leqslant mid]\) 决定权值,也可以说),然后扫所有询问。

  • 这其实是隐含着时间关系的:先操作,后询问。那么...当操作与询问有序的时候,自然也可以按这个序来扫。

  • 另外应当指出的是,一开始操作是有序的,所以扫完之后还是有序的,没必要排序;只是右区间的操作序列反过来了,故考虑打翻转标记或者对称交换一下。

P3527 [POI2011] MET-Meteors

  • 题意略。记得用树状数组+差分实现区间加就好,因为线段树比较卡常。

P1527 [国家集训队] 矩阵乘法

  • 题意略。二维树状数组实现一下就好。
posted @ 2023-01-15 10:04  未欣  阅读(90)  评论(0编辑  收藏  举报