Java实现,参考了回答中“https://www.nowcoder.com/questionTerminal/46e837a4ea9144f5ad2021658cb54c4d?f=discussion”山柴帆的解题思路。

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;

public class Main {
    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);
        int N = scan.nextInt();
        int M = scan.nextInt();
        // arrN 保存不同报酬所需的能力值
        int[] arrN = new int[N+M];
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for(int i=0; i<N; i++) {
            int tempK = scan.nextInt();
            int tempV = scan.nextInt();
            arrN[i] = tempK;

            if(map.containsKey(tempK)) {
                int comp = map.get(tempK);
                tempV = comp>tempV ? comp : tempV;
                map.put(tempK, tempV);
            }else {
                map.put(tempK, tempV);
            }

        }
        // arrM 保存M个小伙伴的能力值
        int[] arrM = new int[M];
        for(int i=0; i<M; i++) {
            arrM[i] = scan.nextInt();
            // 将小伙伴的能力值更新到map中
            if(!map.containsKey(arrM[i])) {
                map.put(arrM[i], 0);
            }
            arrN[N+i] = arrM[i];
        }
        scan.close();

        // 排序arrN
        Arrays.sort(arrN);
        // 将map中的各个key的value更新为其可能的最大value值(此步骤会将小伙伴的能力值所能够获得的最大value进行更新)
        int curMax = map.get(arrN[0]);

        Set<Integer> keyArr = map.keySet();
        Integer[] arr = new Integer[map.size()];
        arr = keyArr.toArray(arr);
        Arrays.sort(arr);
        for(int i=0; i<arr.length; i++) {
            curMax = Math.max(curMax, map.get(arr[i]));
            if(curMax>map.get(arr[i])) {
                map.put(arr[i], curMax);
            }
        }
        // 
        for(int i=0; i<M; i++) {
            System.out.println(map.get(arrM[i]));
        }
    }
}