二分--LIGHTOJ 1088查找区间(水题)

来源:互联网 发布:linux 没有dump命令 编辑:程序博客网 时间:2024/05/16 10:15
#include <iostream>#include <cstdio>#include <cmath>using namespace std;const int maxN = 100005;int a[maxN];int t, tt;int n, q, x, y;int Bsearch_lower_bound(int x){    int l = 0, r = n - 1, mid = 0;    while (l <= r)    {        mid = (l + r) >> 1;        if (a[mid] < x) l = mid + 1;        else r = mid - 1;    }    return l;}int Bsearch_upper_bound(int x){    int l = 0, r = n - 1, mid = 0;    while (l <= r)    {        mid = (l + r) >> 1;        if (a[mid] <= x) l = mid + 1;        else r = mid - 1;    }    return l;}void solve(){    scanf("%d%d", &n, &q);    printf("Case %d:\n", ++tt);    for (int i = 0; i < n; i++)        scanf("%d", &a[i]);    for (int i = 0; i < q; i++)    {        scanf("%d%d", &x, &y);        int l = Bsearch_lower_bound(x);        int r = Bsearch_upper_bound(y);        printf("%d\n", r - l);    }}int main(){    scanf("%d", &t);    while (t--) solve();    return 0;}

0 0