/*
1.有关对于 lower_bound()的基本使用方法和在使用中
经常用到的几点说明.
2.第一次学习lower_bound(),首先要对于lower_bound()中的
参数有一个初步的学习和认识,首先,我们知道
对于一个lower_bound(begin,last,val)
eg. int pos = lower_bound( a,a+10,5 ) - a;
eg. int idx = lower_bound( a,a+10,6) - a;
3.lower_bound()函数的使用要很明确,lower_bound()的作用是
找到大于或者等于val的第一个元素的位置。如果所有的元
素都小于val,则返回last的位置。
eg. 比如说有一个数组a[5]
1 3 5 7 18 --- 数值
0 1 2 3 4 --- 下标
int pos = lower_bound( a,a+5,2)-a;
则说明返回的是 1 ,因为3的下标为1
int pos = lower_bound( a,a+5,6)-a;
则说明返回的是 3,因为7的下标为3
int pos = lower_bound( a,a+5,20)-a;
则说明返回的是 5,因为在这个数组中的所有数字都比20小,
那么对于这种情况,我们就要取最后一个元素的下标加1了。所以结果
为5。
所以,要记住:函数lower_bound()在first和last中的前闭后开区间进行二分查找,
返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置,
且last的位置是越界的!!~
*/
# include<cstdio>
# include<iostream>
# include<algorithm>
using namespace std;
int main(void)
{
int a[10];
for ( int i = 0;i < 10;i++ )
a[i] = 2*i;
int m;cin>>m;
int pos = lower_bound(a,a+10,m)-a;
if ( a[pos] > m )
cout<<a[pos-1]<<endl;
else
cout<<a[pos]<<endl;
return 0;
}
//斐波那契找上界问题
# include<cstdio>
# include<iostream>
# include<algorithm>
using namespace std;
# define MAX 100
long long a[MAX+10];
void dabiao()
{
a[0] = 0;
a[1] = 1;
for ( int i = 2;i< 100;i++)
{
a[i] = a[i-1]+a[i-2];
}
}
//int b[MAX];
int main(void)
{
dabiao();
int n;cin>>n;
for ( int i = 0;i < n;i++ )
{
long long m;cin>>m;
int id = lower_bound(a,a + 100,m) - a;
if ( a[id] > m)
cout<<a[id-1]<<endl;
else
cout<<a[id]<<endl;
}
return 0;
}
lower_bound() 的使用
最新推荐文章于 2024-02-24 22:43:27 发布