现在的位置: 首页 > 综合 > 正文

lower_bound() 的使用

2018年04月29日 ⁄ 综合 ⁄ 共 1215字 ⁄ 字号 评论关闭
/*
    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;
}

抱歉!评论已关闭.