STL函数
lower_bound(begin,end,val);、
//在a数组中查找3第一次出现的位置
//如果查到val,返回val的下标
//如果没查到val,返回第一个大于val的元素的下标
//如果没查到val,并且val大于所有元素,返回数组末尾的元素的下标
//最后减数组名
//例:lower_bound(a,a+n,3)-a;
upper_bound(begin,end,val);
//在a数组中查找第一个比3大的元素
//返回第一个比3大的元素下标
//如果没找到,返回数组中最后一个元素的下标
//例:upper_bound(a,a+n,3)-a
函数应用:通过记录1
二分查找模版
#include<bits/stdc++.h>
using namespace std;
int n, m, a[10005], k, l, r, mid, ans;
int read(){
int x = 0, w = 1;
char ch = 0;
while(ch < '0' || ch > '9'){
if(ch == '-')w = -1;
ch = getchar();
}
while(ch >= '0' &&ch <= '9'){
x = x * 10 + (ch - '0');
ch = getchar();
}
return x * w;
}
int main(){
n = read(), m = read();
for(int i = 1; i <= n; i++)a[i] = read();
sort(a+1, a+n+1);
//1. k可以不存在 2.数组a中可以出现重复数值(输出第一次出现的位置)
while(m--){
cin >> k;
l = 1, r = n, ans = -1;
while(l <= r){
mid = l + (r - l) / 2;
if(a[mid] >= k)ans = mid, r = mid-1;
else l = mid+1;
}
if(a[ans] != k)cout << -1 << endl;
else cout << ans << endl;
}
return 0;
}
标签:二分,ch,下标,val,bound,mid,ans
From: https://www.cnblogs.com/hnzzlxs01/p/16655926.html