演習課題「upper_bound」
整数n,qと長さnの配列a,長さqの配列kが与えられるので、各k[i]について、この配列のk[i]以下である要素の個数を出力してください。
入出力用のコードがすでに用意されているので、コードを書き足してプログラムを完成させてください。
期待する出力値
1
3
5
#02:x以上の個数
このチャプターでは、レベルアップ問題集「二分探索メニュー」の「lower_bound」の問題を解いていきます。
# 関数lower_bound(a,n,x)を定義
def lower_bound(a, n, x):
# 変数left,rightをそれぞれ0とnで初期化
left, right = 0, n
# leftとrightが一致しない間
while left != right:
# 変数midに(left+right)/2を代入
mid = (left + right) // 2
# もしa[mid]がx以上なら
if a[mid] >= x:
# rightをmidで更新
right = mid
# そうでなければ
else:
# leftをmid+1で更新
left = mid + 1
# leftを返す
return left
n = int(input())
a = [int(x) for x in input().split()]
q = int(int(input()))
# 配列(リスト)aを昇順にソート
a.sort()
k = [0] * q
for i in range(q):
k[i] = int(input())
# n-lower_bound(a,n,k[i])を出力
print(n - lower_bound(a, n, k[i]))
3
8 1 3
1
3
10
10 9 8 7 6 5 4 3 2 1
2
5
7