二分查找的相关内容

来源:互联网 发布:淘宝网男夏装 编辑:程序博客网 时间:2024/06/06 09:11
//二分查找int bsearch(int *A, int x, int y, int v){    int m;    while(x < y)    {        m = x + (y-x)/2;        if(A[m] == v)            return m;        else if(A[m] > v)            y = m;        else            x = m + 1;    }    return -1;}//查找元素值相同的子序列中最靠前的下标int lower_bound(int *A, int x, int y, int v){    int m;    while(x < y)    {        m = x + (y-x)/2;        if(A[m] >= v)            y = m;        else            x = m + 1;    }    return x;}//查找元素值相同的子序列中最靠后的下标int upper_bound(int *A, int x, int y, int v){    int m;    while(x < y)    {        m = x + (y-x)/2;        if(A[m] <= v)            x = m + 1;        else            y = m;    }    return x;}//实际上STL中包含了lower_bound,upper_bound的实现;
//以下代码实现的是在给定的一组数中,输出闭区间a,b内整数的个数;
#include<cstdio>#include<algorithm>using namespace std;int v[10000];int main(){    int n, m, a, b;    scanf("%d%d", &n, &m);    for(int i = 0; i < n; i++)        scanf("%d", &v[i]);    sort(v, v+n);    for(int i = 0; i < m; i++)    {        scanf("%d%d", &a, &b);        printf("%d\n", upper_bound(v, v+n, b)-lower_bound(v, v+n, a));    }}


0 0
原创粉丝点击