整体二分入门
整体二分用于这样的问题:
- 可离线
- 询问答案可用二分+check得到,check内容为扫一遍询问之前的操作
- 询问类型相同
考虑一个询问,如果二分答案之后得知答案区间在\([l,mid]\),那么\((mid,r]\)的修改在以后都不需要了。同样若答案区间在\((mid,r]\),那么把询问的要求减去前半部分的贡献后\([l,mid]\)的修改也不需要了。
这个过程是针对一个询问的,考虑对所有询问同时做这个。先将所有操作按时间排序,考虑分治操作序列,同时记录当前的询问和修改的值域区间。则我们先二分一个值,然后扫一遍序列,这样序列中所有询问都做了一次check。再按它们答案在哪边分为两个部分,方法同上一段所述。
复杂度\(O(n\log n)\)。