1. 程式人生 > >關於C++ STL中的lower_bound用法

關於C++ STL中的lower_bound用法

  • 一、用法:

           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;
}