lower_bound与upper_bound
2015-09-14 17:39
246 查看
这一部分的主要内容是关于这两个二分查找lower_bound与upper_bound的应用。
二分查找是一个重要的查找方法,当手写来不及时,可以直接调用这个函数。
lower_bound:
使用方法:
lower_bound(a,a+len,n);
这条语句表示在a数组的前len个中寻找值为n的第一个数,并返回它的地址。
upper_bound用法相同,并返回最后一个值为n的下一个数的地址。
如果没有找到,函数将返回数组最后一个元素的下一个元素的地址。
由于这些性质,我们可以利用这两个函数求在一个有序数列中,某一个数出现的次数。
当然,使用二分查找必须要满足数列的单调性,如果没有单调性,那么二分查找的结果肯定是不准确甚至错误的。
二分查找是一个重要的查找方法,当手写来不及时,可以直接调用这个函数。
lower_bound:
使用方法:
lower_bound(a,a+len,n);
这条语句表示在a数组的前len个中寻找值为n的第一个数,并返回它的地址。
upper_bound用法相同,并返回最后一个值为n的下一个数的地址。
如果没有找到,函数将返回数组最后一个元素的下一个元素的地址。
由于这些性质,我们可以利用这两个函数求在一个有序数列中,某一个数出现的次数。
#include<cstdio> #include<algorithm> #define MAXN 100000 using namespace std; int n,q,x; int a[MAXN]; int main() { int i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); scanf("%d",&q); for(i=1;i<=q;i++) { scanf("%d",&x); int len=upper_bound(a,a+n,x)-lower_bound(a,a+n,x); printf("%d\n",len); } }
当然,使用二分查找必须要满足数列的单调性,如果没有单调性,那么二分查找的结果肯定是不准确甚至错误的。
相关文章推荐
- Android studio如何使用SVN进行版本控制?
- 转载:天涯——散文天下——《朋友》——作者:南方孤驴
- Android 开源项目PhotoView源码分析
- viewPager使用(二)-自主实现滑动指示条,固定标题项
- boost高并发网络框架+线程池
- J2EE过滤器Filter基础
- linux常用命令(26):用SecureCRT来上传和下载文件
- HBase Filter及对应Shell
- Asp.Net_获取IP地址
- Asp.Net_<asp:RadioButtonList
- HDU 2055 An easy problem
- 高并发的epoll+线程池,epoll在线程池内
- 苹果的3D Touch技术与安卓以往的“长按屏幕”有何区别
- Android 安装apk代码
- Hadoop WritableComparable接口
- php-zmq的安装
- 仿360工具栏
- 转载:天涯——散文天下——《一个人的悲剧人生》——作者:南方孤驴
- 【转】使用 vim + ctags + cscope + taglist 阅读源码
- div中的内容垂直居中的五种方法