基準点以上の受験者の人数

  • 二分探索
  • 問題 09
  • ふつう
  • 目安 31 分

低い順に並んだ受験者の点数と、いくつもの基準点が与えられる。基準点ごとに全員を数え直さず、二分探索で人数を答える練習です。

本番の試験は PC で受けることが多いので、PC での練習をすすめます。スマホでも、読んで、書いて、採点するところまで動きます。

入力は標準入力から読み、答えは標準出力に書きます。1 テストあたり 2 秒までです。

問題

社内の資格試験を N 人が受けました。N 人の点数が、低い順 (同じ点数の人がいれば続けて) に並べて与えられます。そのあと、合格の基準点の候補が Q 個与えられます。基準点の候補 x のそれぞれについて、「x 点以上を取った人は何人か」を 1 行ずつ出力してください。

入力の形式

N
a_1 a_2 ... a_N
Q
x_1
x_2
...
x_Q

1 行目に受験者の人数 N、2 行目に N 人の点数 a_i が半角の空白 1 つで区切られて並びます。3 行目に基準点の候補の数 Q、4 行目から Q 行は、1 行に 1 つの基準点 x_k です。

出力の形式

Q 行を出力します。k 行目に、x_k 点以上を取った人の数を書きます。1 人もいなければ 0 を書きます。

制約

  • N と Q は、どちらも 1 以上 200000 以下です
  • 点数 a_i は、0 以上 1000000 以下の整数です
  • 点数は低い順に並んでいます。a_1 は a_2 以下、a_2 は a_3 以下、と続き、a_(N-1) は a_N 以下です
  • 基準点 x_k は、0 以上 1000000 以下の整数です

入力と出力の例

例 1

6 人の点数が 40、55、60、60、72、90 です。60 点以上は 60、60、72、90 の 4 人、91 点以上は 0 人、0 点以上は全員の 6 人、56 点以上は 60 点からなので 4 人です。

入力

6
40 55 60 60 72 90
4
60
91
0
56

出力

4
0
6
4

例 2

受験者が 1 人で、基準点がその人の点数とちょうど同じときと、1 点だけ上のときです。

入力

1
70
2
70
71

出力

1
0

ヒント

まだ開いていません

付箋は 3 枚。下の段ほど答えに近づきます

  1. ヒント 2

  2. ヒント 3答えに近い

main.py
import sys

data = sys.stdin.read().split()
n = int(data[0])
scores = list(map(int, data[1:1 + n]))
q = int(data[1 + n])
queries = list(map(int, data[2 + n:2 + n + q]))

# ここから書く

入力

出力

「実行する」を押すと、ここに出力が出ます

できているか「提出して採点」を押すと、隠れたテストを全部走らせて、通ったかをここに出します