1. 程式人生 > >lower_bound( )和upper_bound( )用法

lower_bound( )和upper_bound( )用法

首先,使用的前提是排好序的非遞減陣列。lower_bound( )和upper_bound( )都是利用二分查詢的方法在一個排好序的陣列中進行查詢的。

lower_bound( begin,end,num):從陣列的begin位置到end-1位置二分查詢第一個大於或等於num的數字,找到返回該數字的地址,不存在則返回end。通過返回的地址減去起始地址begin,得到找到數字在陣列中的下標。

upper_bound( begin,end,num):從陣列的begin位置到end-1位置二分查詢第一個大於num的數字,找到返回該數字的地址,不存在則返回end。通過返回的地址減去起始地址begin,得到找到數字在陣列中的下標。

如果是在從大到小的排序陣列中:

lower_bound( begin,end,num,greater() ):從陣列的begin位置到end-1位置二分查詢第一個小於或等於num的數字,找到返回該數字的地址,不存在則返回end。通過返回的地址減去起始地址begin,得到找到數字在陣列中的下標。

upper_bound( begin,end,num,greater() ):從陣列的begin位置到end-1位置二分查詢第一個小於num的數字,找到返回該數字的地址,不存在則返回end。通過返回的地址減去起始地址begin,得到找到數字在陣列中的下標。

#include <bits/stdc++.h>
using namespace std; int main() { int a[1001]; int n,m; cin>>n>>m; for(int i=0;i<n;i++){ cin>>a[i]; } sort(a,a+n); int l=lower_bound(a,a+n,m)-a; //返回陣列中第一個大於或等於查詢數的值 int r=upper_bound(a,a+n,m)-a; //返回陣列中第一個大於查詢數的值 cout<<l<<" "
<<a[l]; cout<<r<<" "<<a[r]; sort(a,a+n,greater<int>()); int x=lower_bound(a,a+n,m,greater<int>())-a; int y=upper_bound(a,a+n,m,greater<int>())-a; cout<<x<<" "<<a[x]; cout<<y<<" "<<a[y]; }