ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

整体二分学习笔记

2022-08-20 12:30:42  阅读:123  来源: 互联网

标签:二分 递归 询问 mid 笔记 查询 学习 区间 排名


# 整体二分

本文代码见[这](https://oi-wiki.org/misc/parallel-binsearch "这")。

二分,精髓就在于一个"猜测"。猜测答案是否小于 $mid$ 、是否等于 $mid$ 。

先想一个简单的问题:一次查询全序列中排名为 $k$ 的数。

排名的定义是:小于一个数的数的个数+1。

当然可以排序然后输出。也可以用二分解决:

猜测排名为 $k$ 的数是 $mid$ ,然后比较 $k$ 与 $mid$ 的排名(记为 $mid.rk$ )。

若 $mid.rk<k$ ,那说明 $mid$ 偏小,排名为 $k$ 的数的值就位于 $[mid+1,r]$ 。反之不赘述。

** 根据排名的定义,一个数的排名可以用桶标记全序列然后做前缀和求。 **

时间复杂度是 $O(n+\lg_n)$ 。

这是一个思维体操。

当询问很多,一次次处理的效率就变得低效。

那么不妨想一想:能否把全部询问放在一起?递归去实现?

此时二分的 $[L,R]$ 是答案的值域,当做传参放进递归。

**对于每个 $[L,R]$ ,都存在一些(可能为0)个询问的答案值属于此区间。**

$L=R$ 时就意味着确定了答案,当前区间"拥有"的所有询问的答案都是 $L$ 。

所以在每次递归时要做的事情是将全部询问**划分为两类**:答案不大于 $mid$ 的、答案大于 $mid$ 的。

然后递归下去。

问题就在于 **如何划分** 。

两个问题阐明:

1、多次查询 **全序列** 中排名第 $k$ 的值。

直接比较 $mid$ 在全序列中的排名和要查询的排名,然后根据比较结果划分。

递归下去。

求全序列中的排名可以在输入完后直接用桶来给每个数打标记,然后做前缀和。

这个操作可以用树状数组优化。

2、多次查询**区间**排名第 $k$ 的值。

考虑比较 $mid$ 在查询区间内的排名和要查询的排名。

能否继续上述操作?很明显不能,为什么?

因为**存在值域不在 $[L,R]$ 内的数**!这样求出的排名是错误的。

那可不可以在当前递归找到值域位于 $[L,R]$ 的数再在递归内计算排名?

**可以。**划分询问都可以完成,把数划分的操作为什么不可以?

所以对于每个 $[L,R]$ ,不仅存在一些询问的答案值位于此区间内,**还存在一些原序列的数的值域位于此区间内。**

那么问题就在于查询 $mid$ 在询问区间内的排名。

可以把值域 $[L,R]$ "拥有"的、小于 $mid$ 的数按照原序列中的位置加入树状数组。

然后树状数组中就都是小于 $mid$ 的数了,在这之中直接**查找查询区间 $[q_i.l,q_i.r]$ 有多少个数**就是 $mid$ 在查询区间的排名。

至此,问题解决。

这样在递归内每次都搞一遍,时间效率怎么样?

记答案值域大小为 $N$ 。

不难发现最多递归 $\lg_N$ 层,每层的时间复杂度是 $N\lg_N$ 级别的,故时间复杂度是 $O(N\lg_N^2)$ 。

那么可以有一个基本的套路:想方设法求出 $mid$ 在每个询问上的数据,将 $mid$ 的数据与查询数据比较以划分区间。

需要注意的是一些时候需要对划分到一侧的询问进行修改,如查询第 $k$ 大,需要将划分到右侧的询问都减去 $mid$ 在查询区间的排名。

OI题瞬息万变,最重要的还是见招拆招,灵活处理。

标签:二分,递归,询问,mid,笔记,查询,学习,区间,排名
来源: https://www.cnblogs.com/2008verser/p/16607497.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有