📂算法
🔖算法
2023-01-02 11:18阅读: 25评论: 0推荐: 0

02二分

二分

问题

适用于一个序列,有一个check函数,能够使得序列左边都返回false,右边都返回true,然后我们找的就是这个分界点的时候

基本思想

两种情况
一种是求 左半段最后一个元素,也就是说求上界,比如求 小于等于 x 的最后一个元素
这时候 mid = l + r + 1 >> 1;

bool check(int mid , int x){
return q[mid] <= x;
}
if(check(mid,x)) l = mid;
else r = mid - 1;

另一种情况是求 右半段的第一个元素,也就是求下界,比如求 大于等于 x 的第一个元素
这时候 mid = l + r + 1 >> 1;

bool check(int mid , int x){
return q[mid] >= x;
}
if(check(mid,x)) r = mid;
else l = mid + 1;

模板

给定一个序列 q , 求大于等于 x 的第一个值 右半段的第一个

bool check(int mid , int x){
return q[mid] >= x;
}
int l = 0, r = n - 1, mid;
while (l < r)
{
mid = l + r >> 1;
if (check(mid, x)) r = mid;
else l = mid + 1;
}
if(q[l] == x) ...

给定一个序列 q , 求小于等于 x 的最后一个值 左半段的最后一个

bool check(int mid , int x){
return q[mid] <= x;
}
int l = 0, r = n - 1, mid;
while (l < r)
{
mid = l + r + 1 >> 1;
if (check(mid, x)) l = mid;
else r = mid - 1;
}
if(q[l] == x) ...

本文作者:咿呀咿呀悠

本文链接:https://www.cnblogs.com/da-zhi/p/17019626.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   咿呀咿呀悠  阅读(25)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
  1. 1 辞 九门回忆 REOL
辞 九门回忆 - REOL
00:00 / 00:00
An audio error has occurred.

作词 : 虫二颠

作曲 : 唯子/妖狐公子

一曲定重楼

一眼半生筹

看的全都是那诡谲云涌

入得此门不回首

无需宣之于口

我对案再拜那风雨瓢泼的残陋

再聚首

戏子多秋

可怜一处情深旧

满座衣冠皆老朽

黄泉故事无止休

戏无骨难左右

换过一折又重头

只道最是人间不能留

误闯天家

劝余放下手中砂

张口欲唱声却哑

粉面披衣叫个假

怜余来安座下

不敢沾染佛前茶

只作凡人赴雪月风花

绕过胭脂楼

打散结发扣

唱的全都是那情深不寿

入得此门不回首

无需宣之于口

我对镜遮掩那风雨瓢泼的残陋

碑已旧

戏子多秋

可怜一处情深旧

满座衣冠皆老朽

黄泉故事无止休

戏无骨难左右

换过一折又重头

只道最是人间不能留

误闯天家

劝余放下手中砂

送那人御街打马

才子佳人断佳话

怜余来苦咽下

求不得佛前茶

只留三寸土种二月花