/* 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; }