#include<iostream>
using namespace std;
const int N = 1000010;
int n,m;
int q[N];
//二分 把一个区间分成性质互相对立的区间
//其中,左半部分的性质最右端的数,是这满足这性质的最后一点,
//check中间索引的数比较这个数 if大,则x位置就在左边,区间变为l-mid 可能等于mid
//if小 则 X 位置在mid+1 -- r (原来区间是从小到大排序的,所以当q[mid]小时,则 x 比不可能在mid 上)
//右半部分的性质最左端的数,满足这性质的第一个点
//if q[mid] > x 则 x的位置就在mid的左侧,区间在l--mid-1 else x的位置就在mid的右侧 区间在mid--r
int main(){
scanf("%d,%d",&n,&m);
for(int i = 0; i< n ;i ++) scanf("%d",&q[i]);
// 左边界
while(m--){
int x;
scanf("%d",&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 ) cout<<"-1 -1"<<endl;
else{
cout<<l<<' ';
//右边界
int l = 0 , r = n -1;
while(l < r ){
int mid = r + l +1 >> 1;
if(q[mid] <= x ) l =mid;
else r = mid -1 ;
}
cout<<l<<endl;
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)