문제 주소: https://www.acmicpc.net/problem/19637
난이도: silver 3
tags = [input().split() for _ in range(N)]
#칭호 N개에 대한 이름과 그에따른 전투력 기준을 리스트에 저장한다.
#입력은 오름차순으로 주어진다.
def print_tag(stat, tags):
low = 0 #시작 인덱스
high = len(tags) - 1 #끝 인덱스
ans = 0 #나중에 return해줄 정답
while low <= high: #이진탐색 시~작!
mid = (low + high) // 2
if int(tags[mid][1]) >= stat:
#만약에 중간값에 해당하는 칭호의 전투력 컷 보다 입력받은 전투력이 낮거나 같으면
high = mid - 1 #끝 인덱스를 재설정해줌
ans = mid# 같을 경우에 정답일지 모르니 일단 저장
else:
low = mid + 1
return ans
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
def print_tag(stat, tags):
low = 0
high = len(tags) - 1
ans = 0
while low <= high:
mid = (low + high) // 2
if int(tags[mid][1]) >= stat:
high = mid - 1
ans = mid
else:
low = mid + 1
return ans
tags = [input().split() for _ in range(N)]
for _ in range(M):
stat = int(input().rstrip())
ans = print_tag(stat, tags)
print(tags[ans][0])