import java.util.*;
import java.io.*;
public class Main {
static int N;
static int M;
static Criteria[] limitValues;
public static class Criteria{
String name;
int value;
public Criteria(String name, int value){
this.name = name;
this.value = value;
}
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
limitValues = new Criteria[N];
for(int i=0; i<N; i++){
st = new StringTokenizer(br.readLine());
String name = st.nextToken();
int value = Integer.parseInt(st.nextToken());
limitValues[i] = new Criteria(name, value);
}
for(int i=0; i<M; i++){
int val = Integer.parseInt(br.readLine());
bw.write(binarySearch(val));
bw.newLine();
}
bw.flush();
}
public static String binarySearch(int value){
int left = 0;
int right = N-1;
int ans = 0;
while(left<=right){
int mid = (left+right)/2;
if(value<=limitValues[mid].value){
ans = mid;
right = mid-1;
}
else{
left = mid+1;
}
}
return limitValues[ans].name;
}
}
정석 이분탐색 문제(?) 라고 할 수 있겠다. 시간 초과가 나서 혹시나해서 출력을 System.out.println()말고 bufferedwriter을 썼더니 시간은 괜찮아졌다. 그런데, 분명 코드에는 틀린 게 없는 것 같았는데 계속 틀렸다고 나왔다. 알고 보니 bufferedwriter을 써서 출력할때는 write()를 한 후에 flush()를 써서 출력해야했는데 flush()를 안 해줌 ㅋㅋ... 그래서 그 부분 고치고 정답 맞췄다. StringBuilder로 모아준 후에 System.out.println으로 출력해주는 방법도 있다!