临近NOIP,身为蒟蒻的我开始了基础知识的回顾,希望可以拿到弱省的一个一(二)等奖orz
今天学习的是二分答案!
当我们做题是发现题目的描述中出现了:最大值最小 最小值最大 这两种说法时,我们就应当注意了,这个题目使用二分的几率是达到80%~90%的。
下面是二分的基础伪代码:
int left,right;
left=1,right=n;
while(left<=rignt)
{
int mid=(left+right)/2;
if(judge(mid)==false) //判断mid这个值成不成立
left=mid+1;
else right=mid-1;
}
//最后的答案是left或right,根据题目
当然在c++中,我们用二分查找时有两个函数可以使用(忘记别的语言有没有了...)
就是 upper_bound()和lower_bound() 事实上是这几天好懒剩下的一直拖着不想写了
注:使用二分查找只适用于顺序存储结构,包括上述两个函数
推荐一道经典题目:导弹拦截 洛谷数据加强版
使用二分O(nlogn)的复杂度求最长不下降子序列拿到200分哦
关于这个题的题解刚刚安排上了(挖个坑先)