知识点

关于lower_bound和upper_bpund函数的使用

upper_bound(begin, end, value)

//在从小到大的排好序的数组中,在数组的 [begin, end) 区间中二分查找第一个大于value的数,找到返回该数字的地址,没找到则返回end。

upper_bound(begin, end, value, greater())

//在从大到小的排好序的数组中,在数组的 [begin, end) 区间中二分查找第一个小于value的数,找到返回该数字的地址,没找到则返回end。

lower_bound(begin, end, value)

//在从小到大的排好序的数组中,在数组的 [begin, end) 区间中二分查找第一个大于等于value的数,找到返回该数字的地址,没找到则返回end。

lower_bound(begin, end, value, greater())

//在从大到小的排好序的数组中,在数组的 [begin, end) 区间中二分查找第一个小于等于value的数,找到返回该数字的地址,没找到则返回end。

声明以上介绍引自CSDN博主"寂空_"

如果感兴趣的话我下面已经给出链接 点我

#include <algorithm>
#include <bits/stdc++.h>

#define int long long 
using namespace std ;
signed  main()
{
    ios::sync_with_stdio(false),cin.tie(nullptr) ;
    int n,q;
    cin >> n >> q;
    vector<int>a(n) ;
    for(int i = 0;i < n;i++) cin >> a[i] ;
    sort(a.begin(),a.end()) ;
    while(q--)
    {
        int l,r;
        cin >> l >> r;
        auto x = lower_bound(a.begin(), a.end(), l) - a.begin();
        auto y = n - ( a.end() - upper_bound(a.begin(), a.end(),r) ); 
        cout << y - x << "\n" ;
    }

    return 0 ;
}