二分模板 不会乱的
(29条消息) 不需要考虑mid+1、mid-1的二分查找模板,希望大家都能学会_二分查找如果light mid 不加1_一支彩色铅笔的博客-CSDN博客
非常好的博客,爱来自中国
非常好的视频,爱来自中国
下面给出代码模板,这种二分比y总给出的模板更清晰更好理解和灵活变用
PS:二分的前提是序列满足连续两种不同的性质,而且我们可以根据这种性质将其分成左右两个子列
#include<iostream> #include<cstdio> using namespace std; bool check(int mid) { return true; } int main() { int n; cin >> n;//n为序列长度 int L = -1; int R = n;//左右指针,分别指向左右边界,注意这很重要
//while循环过后,结果是L指向左侧子集的左边界,R指向右侧子集的右边界
//注意,左右子集的划分必须是没有重合部分的,最后我们可以根据题目要求选择输出L指针还是R指针 while (L + 1 != R) { int mid = L + R >> 1; if (check(mid))//检查mid性质若其满足左边界性质,更新左侧边界逼近为mid,反之右侧边界逼近mid。 L = mid; else R = mid; } printf("%d %d", L, R); }