[BOJ 19637]IF文を書いてくれ(Python)


質問する
IF文を書いてくれ
問題の説明
称号の個数もキャラクターの個数も100000なので、Nlog(M) or Mlog(N)内で終了コードを記述する必要があります.
称号を基准とするか、キャラクターを基准とした二分探索をすれば良いのです
問題では、称号が降雨順に並べられているため、各キャラクターには称号リストが渡され、この方向にナビゲートされます.
同じ値がある場合、ライブラリの対分leftは最も左側のインデックスを返します.検索する値がない場合は、中央値の右側に戻りますので、負の値を先に置いておくと便利です.
プールコード
import sys
import bisect

input = sys.stdin.readline
n, m = map(int, input().split())
title = []
power = [-1]
for i in range(n):
    t, p = map(str, input().rstrip().split())
    title.append(t)
    power.append(int(p))

for _ in range(m):
    p = int(input())
    index = bisect.bisect_left(power, p)
    print(title[index - 1])