首页 > 其他分享 >[离线技巧] 整体二分

[离线技巧] 整体二分

时间:2024-04-12 11:36:51浏览次数:24  
标签:二分 技巧 个数 询问 离线 mid 复杂度 log

来介绍一下整体二分。

整体二分需要满足一下条件:

  • 问题之间独立
  • 可以离线
  • 具有单调性答案
  • 贡献可合并

我们通过几个例子,通俗的理解这个算法。

问题 \(1\)

给定 \(n\) 个数,求第 \(k\) 小。

我们思考这个问题怎么做。
不用排序,显然,答案具有单调性。
那么,我们可以二分一个答案,判断有多少个数小于等于当前的数,求出排名,然后得出答案。

时间复杂度 \(O(n\log w)\)

问题 \(2\)

给定 \(n\) 个数, \(q\) 次询问第 \(k_i\) 小。

我们考虑每个询问都二分答案,前缀和处理出所有数出现个数(不是,都排序了,为什么要这样搞),判断即可。
时间复杂度 \(O((n+q)\log n)\)

问题 \(3\)

给定 \(n\) 个数,求区间 \([l,r]\) 第 \(k\) 小。\(q\) 次询问。

这是主席树经典问题。
我们考虑二分解决。
对于第 \(k\) 次询问,我们二分答案,把所有小于等于 \(mid\) 的数打上标记,看看 \([l,r]\) 内有多少个打标记的数即可。

时间复杂度 \(O(nq\log w)\) 很明显,这超时了。

我们发现瓶颈在每次都打一次标记。于是整体二分思想就出来了,整体二分一个 \(mid\) ,然后把所有 \(\forall x\le mid\) 都打上标记,然后对于一个询问是否合法,区间查询个数,然后扔成 \([l,mid]\) 和 \([mid+1,r]\) 两部分处理即可。

这就是整体二分的思想,它的妙处是每次处理询问,操作,时间复杂度都是 \(O(n+q)\log q\) ,瓶颈在于各种操作,例如这题,瓶颈在于区间查询,使用树状数组即可 \(O(n\log^2 n)\) 解决问题。

问题 \(4\) Dynamic Rankings

给定 \(n\) 个数,求区间 \([l,r]\) 第 \(k\) 小,或将 \(a_x\) 修改为 \(y\)。\(q\) 次询问。

按照时间处理询问即可。
具体的,将修改数变为在某个地方加减一个 \(1\) 。
递归处理所有询问即可。

总结一下,对于整体二分,他的适用情况是将原来二分的问题拆开成若干询问,将 \(check(mid)\) 的时间复杂度均摊。

所以,对于整体二分的贡献处理有几种方法。
第一种是像 \(kth\) 小那样,直接消除另一个区间的贡献,问题 \(4\) 就是例题。
另一种是考虑到另一个区间没有贡献,直接不管即可,例题是 This.
还有一种是直接处理完另一半区间后再数据结构上加上这一部分贡献,这个只能静态的搞,\(kth\) 可以靠这个优化成 \(O(n\log n)\) ,例子是 .this

最后,能用小常数 BIT 就尽量用。

标签:二分,技巧,个数,询问,离线,mid,复杂度,log
From: https://www.cnblogs.com/g1ove/p/18130798

相关文章

  • 实用技巧:排查数据异常/数据波动问题,该如何下手?
    前言在我做开发的这些年,让我很头痛的一类问题,不是线上故障,而是数据异常,不知道有没有程序员跟我感同身受。大多数的服务故障都有较为直观的异常日志,再结合产品表象,相对排查起来还有迹可循,但数据异常的原因就太多了,很多时候连报错日志都没有,排查起来简直无从下手。在一个微服务、......
  • Kubernetes Pod配置:从基础到高级实战技巧
    本文深入探讨了KubernetesPod配置的实战技巧和常见易错点。关注【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营......
  • 20个Python 正则表达式应用与技巧
    本文分享自华为云社区《Python正则表达式大揭秘应用与技巧全解析》,作者:柠檬味拥抱。Python中的re模块是用于处理正则表达式的强大工具。正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式。在本文中,我们将探讨Python中re模块的应用和一些技......
  • lc162 寻找峰值(二分法)
      二分法找部分有序数组题class Solution {    public int findPeakElement(int[] nums) {     int left=0;     int right=nums.length-1;     while(left<right){//因为这道题需要用mid和mid+1比较,所以左右不可以相等否则mid+1会越界  ......
  • 毕业神器!查重降重aigc到底怎么降低才好?技巧拿走!
    自从主页分享了些关于论文方面的文章后,最近收到好多论文方面的问题,特别是关于论文查重降重方面的为题,嗯,原来又一年的毕业季来了!要知道论文查重率达标是大学生毕业的一个重要标准,所以每到这个时候查重降重哀声一片!其实查重、降重也有一些小窍门,掌握了就可以帮助大家更加高效地......
  • 【2024年5月备考新增】《软考案例分析答题技巧(3)质量、资源》
    2.5项目质量管理质量管理过程质量管理过程:规划质量管理-管理质量-控制质量。管理质量意义:①通过执行有关产品特定方面的设计准则,设计出最优的成熟产品;②建立信心,相信通过质量保证工具和技术(如质量审计和故障分析)可以使未来输出在完工时满足特定的需求和期望;③确......
  • 【2024年5月备考新增】《软考案例分析答题技巧(4)沟通、干系人、风险》
    2.7项目沟通管理项目沟通管理过程:规划沟通管理-管理沟通-监督沟通。沟通5种基本状态:已发送、已收到、已理解、已认可、已转化为积极行动。沟通分类:内部沟通、外部沟通、正式沟通、非正式沟通、官方沟通、非官方沟通、书面与口头沟通。沟通技巧:书面沟通(5C:正确、简洁、......
  • #莫队二次离线,根号分治#洛谷 5398 [Ynoi2018] GOSICK
    题目\(m\)组询问求\(\sum_{l\leqi,j\leqr}[a_i\bmoda_j==0],n,m,a_i\leq5\times10^5\)分析设\(f(l,r,x)\)表示\(i或j\in[1,x],i或j\in[l,r]\)时的答案,\(g_x\)表示\([1,x]\)的答案,根号的做法可以通过三秒由于涉及区间内的求值,需要在莫队的基础上二次离线,那......
  • 手把手教你做阅读理解题-初中中考阅读理解解题技巧016-introduce the effect of music
    PDF格式公众号回复关键字:ZKYD016阅读理解技巧,在帮助读者有效获取和理解文本信息方面发挥着重要作用,熟练掌握如下6个技巧,可快速突破阅读理解1预览文章结构在开始深入阅读之前,快速浏览文章的标题、段落开头和结尾,可以迅速把握文章的主题、大致内容和结构标题通常能概括文章......
  • 二分查找与二分答案(1.)
    1.二分查找大家还知道怎么在一本很厚的词典查找一个单词吗?字典中的单词是按照“字典序”进行排序的,比如code<pan<pancake。如果我们要找一个单词,就要将字典从中间翻开,然后将这面单词跟想要找的单词比较。如果这面单词在需要寻找的单词之前,就将字典往后翻,否则就往前翻,直到找......