二分法细节
2014-07-18 09:01
92 查看
总结:1.本题目中的upper_bound函数中的L=m+1;语句使得(如果V存在于数组中)最后返回值的比v所在坐标值大1(体现v出现的最大位置);
2.本题目的lower_bound函数是确定v在数组中出现的最小位置(如果存在的话);
3.本题目中v如果在数组中有多个则在区间[lower_bound,upper_bound)(左闭右开);
4.如果不能在该值的话:则upper_bound等于lower_bound,区间为空;
5.upper_bound和lower_bound函数本身就是c++的库函数。
2.本题目的lower_bound函数是确定v在数组中出现的最小位置(如果存在的话);
3.本题目中v如果在数组中有多个则在区间[lower_bound,upper_bound)(左闭右开);
4.如果不能在该值的话:则upper_bound等于lower_bound,区间为空;
5.upper_bound和lower_bound函数本身就是c++的库函数。
#include<stdio.h> int num[]={3,5,7,9,10,10,10,12,15,20,25,30};//10个数 int lower_bound(int *A,int L,int R,int V) { int m; while(L<R) { m=L+(R-L)/2; if(A[m]>=V) R=m;//所求点在中点以左 else L=m+1;//所求点在中点以右 } return L; } int upper_bound(int *A,int L,int R,int V) { int m; while(L<R) { m=L+(R-L)/2; if(A[m]<=V) L=m+1;//在中点以右 else R=m;//在中点以左 } return L; } int main() { int num1; int n=10; while(n--) { scanf("%d",&num1); int l=lower_bound(num,0,11,num1); int r=upper_bound(num,0,11,num1); if(num[l]==num1&&num[r]==num1) printf("yes\n"); else printf("%d %d\n",num[l],num[r]); } return 0; }
相关文章推荐
- uvaoj10474---详解细节(二分法)注意!
- 宁波工程学院 [1346] 虎追兔,兔躲虎 二分法 精确度小细节
- 影响SEO的页面制作细节
- InnoSetup能够实现“安装细节描述”界面吗?
- 数据结构——二分法查找
- AS3 HorizontalScroller---- 水平滚动条控件,细节是魔鬼
- yii2细节设置
- 二分法(解方程,UVA 10341)
- JavaScript中的知识点细节
- Python中urllib2模块的8个使用细节分享
- 集合小细节
- 趣味二分法
- SQL2005性能分析一些细节功能你是否有用到?
- 查找算法--二分法
- [转]Ubuntu下两个小细节的调整,如何将vim光标设置为竖线
- 细节决定成败,谨记这43个影响你一…
- Notificaition PendingIntent细节
- 关于用appendChild添加子节点的小细节
- jquery冲突细节
- 细节决定成败