C++STL中的upper_bound()函式的使用
阿新 • • 發佈:2019-02-11
首先要#include<algorithm>
int a[];
upper_bound(a+i,a+j,x)-a返回的是第一個大於x的數的座標
upper_bound(a.begin(),a.end(),x)返回的是迭代器
low_bound(first,last,x)返回的是第一個大於等於x的數的指標或者迭代器
兩者查詢的範圍都是[first,last)
要求陣列或者vector事先是有序的
時間複雜度是O(log(last-first))
如果要自己寫這連個函式,可以參考以下的程式碼:
int upper_bound(int l,int r,int x) { while(l<r){ int mid=(l+r)/2; if(a[mid]>x)r=mid; else l=mid+1; } return l; }
int lower_bound(int l,int r,int x)
{ while(l<r){
int mid=(l+r)/2;
if(a[mid]>=x)r=mid;
else l=mid+1;
}
return l;
}
對比二分查詢int binarysearch(int l,int r,int x)
{ while(l<=r){
int mid=(l+r)/2;
if(a[mid]==x)return mid;
else if(a[mid]>x)r=mid-1;
else l=mid+1;
}
return -1;
}
對比於開方
double sqrt(double x) { double l=1,r=x,mid; while(r-l>eps){ mid=(l+r)/2; if(mid*mid>x)r=mid; else l=mid; } return mid; }