你:“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$继续二分即可。
以上的二分都是基础,想必大家都是没什么问题。
但是如果想要多组询问该怎么做呢?肯定不能每组询问都扫一遍,