二分答案

1.https://www.luogu.com.cn/problem/P2249
用lower_bound最好,二分答案找到大于等于它的最小数
2.https://www.luogu.com.cn/problem/P1824
https://www.luogu.com.cn/problem/P2678
双倍经验题,答案具有明显单调性,二分答案,然后判断是否有满足距离个数的限制条件。

二分模板


下面是两个模板

在递增序列a中查找>=x中的数最小的一个的下标

while(l < r){

int mid = (l + r) >> 1;

if(a[mid] >= x){

r = mid;

}
else 

l = mid + 1;

}

在递增序列a中查找<=x中的数最大的一个的下标
while(l < r){

int mid = (l + r + 1) >> 1;

if(a[mid] <= x){

l = mid;

}
else 

r = mid - 1;

}

最后都返回l

实数域的二分

while(l + 1e-5 < r ){

if(clac(mid))r = mid;

else l = mid

}

或者规定有限的二分次数,
posted @ 2022-11-07 22:18  wmjlzw1314  阅读(21)  评论(0)    收藏  举报