浅谈整体二分和CDQ分治

你:“woc这个树套树细节怎么这么多?”

某dalao:“什么题让我看一看……这不cdq裸题吗?”

你:“???…”


你:“woc这三百行的代码怎么调啊?”

某dalao:“emmm,我的才一百不到啊?”

你:“???求教怎么写的”

某dalao:“整体二分直接做啊”

你:“???…”


整体二分

前置知识:二分答案(等于没说)

先来看一道经典题吧

k-th num

题意:给你一个序列,每次询问一个子序列内的第k大的值

我们先来看如果只有一次询问该怎么做。

考虑使用二分答案二分出答案域$[l, r]$,该怎么检查?

可以直接暴力扫一遍区间,统计一下大小在$[l, mid]$里面的个数,
如果大于$k$的话就说明答案一定在$[l, mid]$里面,令$r = mid$,继续二分。假如大小在$[l, mid]$里面的个数小于$k$,就说明答案在$[mid+1, r]$里面,令$l = mid+1$继续二分即可。

以上的二分都是基础,想必大家都是没什么问题。

但是如果想要多组询问该怎么做呢?肯定不能每组询问都扫一遍,