scanf("%d%d",&n,&m);//n是待输入数组元素的个数,m是待输入目标值的个数for(int i =0; i < n; i ++)scanf("%d",&q[i]);//输入数组
给定查询目标值
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;}
判断目标值在数组中是否存在,如果不存在则返回"-1 -1"
if(q[l]!= x) cout <<"-1 -1"<< endl;
如果存在,则查找目标值的末位置
int l =0, r = n -1;while(l < r){int mid = l + r +1>>1;if(q[mid]<= x) l = mid;else r = mid -1;}
cout << l << endl;
查询m遍
#include<iostream>usingnamespace std;constint N =100010;int n, m;int q[N];intmain(){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 = l + r +1>>1;if(q[mid]<= x) l = mid;else r = mid -1;}
cout << l << endl;}}return0;}