/*代码解析:
本代码基于「二分查找」,必须在递增数组内使用,否则出错
lower_bound 返回指针,指向指定数组范围中大于等于指定数字的值;
通过减法计算偏移量,即可得到下标
upper_bound 返回指针,指向指定数组范围中大于指定数字的值;
通过减法计算偏移量,也可得到下标
*/
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 20;
int n,a[N],x;//n为数组长度,a为数组,x为指定数字
int main(){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cin>>x;//输入数据
int *l = lower_bound(a+1,a+n+1,x);//用指针l存储lower_bound,*l表示对应的数组值
int *u = upper_bound(a+1,a+n+1,x);//用指针u存储upper_bound,*u表示对应的数组值
cout<<*u<<' '<<u-a<<endl;
cout<<*l<<' '<<l-a<<endl;//分别输出数组值和对应下标
return 0;
}
最简单的lower_bound与upper_bound模板(数组)
于 2024-09-20 09:40:37 首次发布