二分与倍增10.2
Posted i-cookie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分与倍增10.2相关的知识,希望对你有一定的参考价值。
二分通常分为两类:二分查找和二分答案.
T1
problem
给出一个数列\(a[1...n]\),现在有m个询问,每次询问比x大的最小的\(a[i]\)的值.
ans
离线:数列和询问都排序,然后扫一遍.
在线:排序,二分查找.
T2
problem
定义一个区间的值为其众数出现的次数.先给出一个数列\(a[1...n]\),求在所有区间的值中,第k大的值是多少.区间大小为1的不计.
ans
设答案为ans,则\(ans\in [2,n]\).设函数\(f[mid]\)为值\(\le mid\)的a有多少个,题目要求\(f(ans)>=K\)且\(ans\)最大.然而这个函数是单调不增的.所以我们通过二分答案来找到ans.
关键是怎么求f的值.
小总结
T3
problem
ans
可以发现w越大,y越小.此时\(y=f(w)\)是一个单调不上升函数.因此我们用二分法求出函数的零点即可.
T4
problem
ans
二分跳跃距离,然后扫一遍如果两块石头之间的距离小于mid的话就移走一块.最后比较移走石头的数与m的大小.
T5
problem
对于一个字符串,询问q次,每次询问\([l,r]\)内最长回文串的长度.\(n,q\le 1e5\).
ans
T6
problem
一个\(n\times m\)的网格图,其中有的格子有障碍,有的没有.有T个询问,每次询问一个子矩阵,查询该子矩阵内边长最大的没有障碍的正方形的边长
ans
二维ST表(跪).
扩展:\(\Theta(1)LCA\)
如图,如果我们想要求出6和5的LCA,我们可以看到在深度序中2和5中间深度最小的是2,所以LCA是2.这个过程需要一次DFS和一个ST表.
以上是关于二分与倍增10.2的主要内容,如果未能解决你的问题,请参考以下文章
二分,倍增的一些思考(lost my music:可持久化栈)
bzoj2280[Poi2011]Plot 二分+倍增+二分+最小圆覆盖
LCA(ST)详解 Codeforces932D-倍增+二分搜索