關於C++ STL中的lower_bound用法
阿新 • • 發佈:2018-11-15
-
一、用法:
int t=lower_bound(a+l,a+r,m)-a
-
二、解釋:
在升序排列的a陣列內二分查詢[l,r)區間內的值為m的元素。返回m在陣列中的下標。
-
三、特殊情況:
1.如果m在區間中沒有出現過,那麼返回第一個比m大的數的下標。
2.如果m比所有區間內的數都大,那麼返回r。這個時候會越界,小心。
3.如果區間內有多個相同的m,返回第一個m的下標。
4.時間複雜度:一次查詢O(log n),n為陣列長度。
注意:m可以是pair等等。還有下標從0開始還是從1開始。
-
四、測設程式碼:
#include<bits/stdc++.h> using namespace std; int a[1000010],t,n,l,r; int main() { //freopen("data.in","r",stdin); //freopen("data.out","w",stdout); cin>>t; for(int i=0;i<t;i++) cin>>a[i]; for(int i=0;i<t;++i) { cin>>l>>r>>n;//在[l,r)區間內查詢n的位置 cout<<lower_bound(a+l,a+r,n)-a+1; } return 0; }