https://www.acwing.com/problem/content/791/

#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,m;
int q[N];
int main() {
scanf("%d%d",&n,&m);
for(int i=; i<n; i++) scanf("%d",&q[i]);
while(m--) {
int x;
scanf("%d",&x);
int l=,r=n-;
while(l<r) {
int mid=l+r>>;
if(q[mid]>=x) r=mid;
else l=mid+;
}
if(q[l]!=x) cout<<"-1 -1"<<endl;
else {
cout<<l<<" ";
int l=,r=n-;
while(l<r) {
int mid=l+r+>>;
if(q[mid]<=x) l=mid;
else r=mid-; //当更新方式为l=mid r=mid-1
}
cout<<l<<endl;
}
}
return ;
}

模板  这两个模板的区别在于去mid的时候是否+1      平时写的时候可以先不写+1, 然后当更新方式为l=mid, r=min-1时,再写上加1

解释+1:

举例子,因为时向下取整,当l=r-1,如果不补上+1,那么min=l+r+1>>1=l 此时 如果说check时成功的 区间更新为l=mid=l 区间没有发生变化 ,那么下次循环也不会变,所以会形成死循环
当补上+1 mid会变成r 区间更新为l=mid=r 区间会从[l,r] 变成[r,r] 就不会发生死循环

bool check(int x) {/* ... */} // 检查x是否满足某种性质

// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = l + r >> ;
if (check(mid)) r = mid; // check()判断mid是否满足性质
else l = mid + ;
}
return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = l + r + >> ;
if (check(mid)) l = mid;
else r = mid - ;
}
return l;
}
//整数二分

最新文章

  1. MyBatis中collection (一对一,一对多)
  2. JavaScript confirm 自定义风格及功能实现
  3. Bete冲刺第六阶段
  4. Mysql Index、B Tree、B+ Tree、SQL Optimization
  5. mysql中如何把字符串转换成日期类型
  6. IOS开发中(null)与&lt;null&gt;的处理
  7. VS2010常用插件介绍
  8. Android的十六进制颜色值
  9. Android canvas rotate():平移旋转坐标系至任意原点任意角度-------附:android反三角函数小结
  10. uva 10020 Minimal coverage
  11. Unity uGUI 登录界面
  12. HDU 3127 WHUgirls
  13. wordpress安装插件--su
  14. STL中队列(queue)的使用方法
  15. Codeforces Round #554 (Div. 2) C. Neko does Maths(数学+GCD)
  16. redis-sentinel高可用配置(2)
  17. mysql的root的权限被控制无法授权
  18. IIS中添加ftp站点
  19. python-pycharm中使用anaconda部署python环境
  20. 如何获得 Microsoft Push Notification Service(MPNS)的最佳体验

热门文章

  1. Arduino上搭建ESP8266环境
  2. UVA1401 (字典树加简单dp)
  3. PAT (Basic Level) Practice (中文)1046 划拳 (15 分)
  4. 51Nod 1284 2 3 5 7的倍数 (容斥定理)
  5. 问题 I: 排名
  6. 主机名由localhost变成bogon是怎么回事,怎样变回localhost这个名字?
  7. 2_abstractions
  8. clone()与clone(true)的用法
  9. Python发带附件的邮件
  10. vue学习指南:第十五篇(详细) - Vuex