給定 n 個互不相同的點座標,回答 m 次查詢:每次詢問閉區間 [a, b] 內包含多少個點。
限制:n, m ≤ 5×10⁵,座標 ≤ 10⁷,時限 2s,記憶體 256MB。
qsort)。lf,與第一個 > b 的位置 rt,答案 = rt - lf(若 a[rt] == b 則 +1)。mid = left + ((right-left) >> 1) 防止溢出。int find(int begin, int end, int ac) {
int mid, left = begin, right = end;
while (left <= right) {
mid = left + ((right - left) >> 1);
if (a[mid] >= ac) right = mid - 1;
else left = mid + 1;
}
return left;
}
// 主循環
qsort(a, n, sizeof(int), compare);
for (i = 0; i < m; i++) {
scanf("%d %d", &l, &r);
if (l > r) swap(l, r);
int rt = find(0, n-1, r);
int lf = find(0, n-1, l);
int ans = rt - lf;
if (a[rt] == r) ans++;
if (ans < 0) ans = 0;
printf("%d\n", ans);
}
algorithm 庫,需用 C 標準庫 qsort。if (a[rt] == r) ans++; 處理右邊界命中情況。清華 OJ 校外不可訪問,建議使用 POJ、ZOJ、HDU、UVA 等公開線上判題系統練習。