鉄則本 B11 とほぼ同じ問題!
問題概要
身長が であるような
人がいる。以下の
回のクエリに答えよ。
【クエリ】
整数 key が与えられるので、身長が key 以上の人が何人いるかを答えよ。
制約
考えたこと
0-indexed で考えます。
最初に、 を小さい順にソートすることにします。このとき、次の値を求められばよいことになります。
A[index] >= key であるような最小の index
この値が求められば、答えは N - index と求められます。

そして、この index は、C++ であれば関数 lower_bound() を使用することで求められます (使い方はこの記事など参照)。この関数の実行に要する計算量は です。
全体として、計算量は
- 最初に
Aをソートする部分: - 各クエリに答える部分:
より、 となります。
コード
#include <bits/stdc++.h> using namespace std; int main() { 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 x; cin >> x; int it = lower_bound(A.begin(), A.end(), x) - A.begin(); cout << N - it << endl; } }