手动实现stl中的lower_bound和upper_bound

来源:互联网 发布:虐杀原形1mac版下载 编辑:程序博客网 时间:2024/06/07 01:08

      lower_bound和upper_bound是algorithm库中特别实用的两个函数,前者的作用是返回有序队列不小于x的第一个编号,后者则是返回大于x的第一个编号。

     如{0,1,2,2,2,3}数组,用 lower_bound的返回值是2(第一个2),用upper_bound的返回值是5(第一个3)。

      手动实现也非常的简单下面附代码。

#include<cstdio>#include<iostream>using namespace std;const int maxn=1000;int a[maxn]={0,1,2,2,2,3};int lower_bound(int l,int r,int mu){   while(l<r)  { int mid=(l+r)/2;if(a[mid]>=mu){r=mid;}else{l=mid+1;}  }  return l;}int upper_bound(int l,int r,int mu){  while(l<r)  { int mid=(l+r+1)/2;if(a[mid]<=mu){l=mid;}else{r=mid-1;}  }  return l+1;}int main(){cout<<lower_bound(1,5,2)<<endl;cout<<upper_bound(1,5,2)<<endl;return 0;}


原创粉丝点击