整体二分也是一种非常妙的分治算法。
大致流程:
-
记(solve(l,r,x,y))表示([x,y])这些询问,他们的答案范围在([l,r])内,并设(mid) 为([l,r])的中点
-
我们先把([l,mid])内的影响计算,再对每个询问:若此询问已经满足要求,则他们所属答案区间为([l,mid]),否则更新此询问,然后把它放进([mid+1,r])中
大致就是这个意思~
时间复杂度的保证多靠一些均摊,有的时候复杂度不一定对,所以看到一些题的时候应该事先分析好复杂度再使用整体二分。
例题: