http://acm.hdu.edu.cn/showproblem.php?pid=4325
/* upper_bound 找大于a[i]的最近的下标 lower_bound 找大于等于a[i]的最近的下标 1 2 4 4 4 5 6 ... l r l r l l l ... 此时q = 4 upper_bound 值为4 lower_bound 值为2 l : (4,5] r : [4,5) l - r : [4] */ /************************************************ * Author :Powatr * Created Time :2015-8-25 15:03:50 * File Name :F.cpp ************************************************/ #include <cstdio> #include <algorithm> #include <iostream> #include <sstream> #include <cstring> #include <cmath> #include <string> #include <vector> #include <queue> #include <deque> #include <stack> #include <list> #include <map> #include <set> #include <bitset> #include <cstdlib> #include <ctime> using namespace std; #define lson l, mid, rt << 1 #define rson mid + 1, r, rt << 1 | 1 typedef long long ll; const int MAXN = 1e5 + 10; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 7; int l[MAXN], r[MAXN]; int main(){ int T; int n, m; int q; scanf("%d", &T); for(int cas = 1; cas <= T; cas++){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d%d", &l[i], &r[i]); sort(l + 1, l + n + 1); sort(r + 1, r + n + 1); printf("Case #%d: ", cas); for(int i = 1; i <= m; i++){ scanf("%d", &q); int ans = (upper_bound(l + 1, l + n + 1, q) - (l + 1)) - (lower_bound(r + 1, r + n + 1, q) - (r + 1)); printf("%d ", ans); } } return 0; }