AcWing 789. 数的范围
原题链接
简单
作者:
fw鑫
,
2021-04-17 17:34:16
,
所有人可见
,
阅读 382
#include<iostream>
using namespace std;
const int N = 100010;
int n,m;
int q[N];
int main()
{
cin >> n >> m;
for(int i = 0;i < n;i ++) cin >> q[i];
while(m --)
{
int x;
cin >> x;
int l = 0,r = n - 1;
while(l < r)
{
int mid = l + r >> 1;
if(q[mid] >= x) r = mid;
else l = mid + 1;
}
if(q[l] != x) puts("-1 -1");
else{
cout << l << ' ';
l = 0,r = n - 1;
while(l < r)
{//本质区别就是你要的值 x x不唯一 x = 8 的话就有 10个8 挨在一起.
//你要最左面的8,那就第一个模板,你要最右边的8那就第二个模板.
// l + r + 1 因为是向下取整数.就是0.5 会被忽略.所有加个1 保证mid
//会定位在 中间靠右的中点上
int mid = l + r + 1 >> 1;
if(q[mid] <= x) l = mid;
else r = mid - 1;
}
cout << l << endl;
}
}
return 0;
}