整体二分总结

1|0整体二分总结

整体二分,就是一种高效离线处理可二分答案的询问的方法,可以代替例如树套树这种高级数据结构。

1|0例题:

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

题意:多次询问,求子矩阵第k小数。

思路:先考虑如果只有一个询问,可以二分答案,把矩阵中小于等于mid的数赋1,大于的赋0,那么如果子矩阵之和大于等于k,那么说明答案不小于mid,反之亦然,这样就可以继续递归下去。同样的,处理很多询问的时候,用二位树状数组维护子矩阵和,把当前子矩阵和大于等于k的询问传到左区间处理,剩下的传到右区间处理就可以了。

2.P3332 [ZJOI2013]K大数查询

题意:有n个可重集,有两种操作,一种是把x插入lr的所有可重集中,一种是查询lr的所有可重集里第k大的数。

思路:先考虑如果只有一个询问,可以二分答案,把所有x>mid的插入操作看成给[l,r]区间加1,查询看成求[l,r]的区间和,如果区间和大于等于k就说明答案在[mid+1,r]中。一般的情况也可以类似处理。

3.P3527 [POI2011]MET-Meteors

题意:有一个环,每个时刻会有一段区间加ai,每个点属于一个集合,对于每个集合,求这个集合包含的所有点的和第一次不小于limi的时刻。

思路:先考虑如果只有一个询问,可以二分答案,如果[1,mid]时刻操作玩答案大于limi,就说明答案在[1,mid]中,对于一般的情况也是如此。

4.P7424 [THUPC2017] 天天爱射击

题意:有n个区间和m个操作,每个操作会把所有覆盖了x的区间的权值+1,每个区间有一个参数lim,求出每个区间的权值第一次到达lim的时刻。

思路:发现题意就是单点加,和查询一个区间和第一次到达k的时刻,于是考虑整体二分,用树状数组实现单点加和区间查询即可。

5.P7560 [JOISC 2021 Day1] フードコート

题意:有n个序列,标号从1n,有3种操作,一是给区间[l,r]内的每个数列后面加入x个数k,二是把[l,r]内每个数列的前k个数删除,三是查询第x个数列的第k个数。

思路:发现求出每个查询对应的k是不算第二种操作时的第几个数,就可以直接用静态区间第k小的思路求解。于是问题转化为了怎么求是第几个数。可以很简单的转化为:总共来过的人数-当前还剩的人数+k,而求出当前还剩的人数可以用线段树维护(区间加,区间取max),于是就做完了。


__EOF__

本文作者Xttttr
本文链接https://www.cnblogs.com/Xttttr/p/17392201.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   Xttttr  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示