주어진 것
1. 각 전투력 별 칭호
2. N과 M의 범위
3. 전투력 별 칭호가 주어지는 순서(비내림차순)
내림차순이 아님
4. N과 M의 범위
알고리즘
전투력에 따른, 칭호
출력
칭호만 출력
생각보다 간단한 구현 문제라고 생각했지만, 세 번의 시간초과를 겪었다.
시간 복잡도 상에서는 둘이 동일하지만, 후자의 방식이 리스트를 더욱 간결하게 만들어 유지하므로 후자의 방식을 선택하였습니다.
import sys
input = sys.stdin.readline
# N: number of titles, M: number of characters
N, M = map(int, input().split())
title_power = []
seen_powers = set()
for _ in range(N):
title, power = input().split()
power = int(power)
if power not in seen_powers:
title_power.append((power, title))
seen_powers.add(power)
# Sort the list by power values
title_power.sort()
def binary_search(power):
left, right = 0, len(title_power) - 1
while left <= right:
mid = (left + right) // 2
if title_power[mid][0] >= power:
right = mid - 1
else:
left = mid + 1
return title_power[left][1] if left < len(title_power) else 'No suitable title'
for _ in range(M):
power = int(input())
print(binary_search(power))