每个输入包含一个测试用例。
每个测试用例的第一行包含两个正整数,分别表示工作的数量N(N<=100000)和小伙伴的数量M(M<=100000)。
接下来的N行每行包含两个正整数,分别表示该项工作的难度Di(Di<=1000000000)和报酬Pi(Pi<=1000000000)。
接下来的一行包含M个正整数,分别表示M个小伙伴的能力值Ai(Ai<=1000000000)。
保证不存在两项工作的报酬相同。
对于每个小伙伴,在单独的一行输出一个正整数表示他能得到的最高报酬。一个工作可以被多个人选择。
3 3 1 100 10 1000 1000000000 1001 9 10 1000000000
100 1000 1001
import java.io.*; import java.util.*; import java.util.Map.Entry; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String[] params = br.readLine().split(" "); int n = Integer.parseInt(params[0]); int m = Integer.parseInt(params[1]); TreeMap<Integer, Integer> map1 = new TreeMap<>(); // 难度->报酬 for(int i = 0; i < n; i++){ params = br.readLine().split(" "); int d = Integer.parseInt(params[0]), p = Integer.parseInt(params[1]); map1.put(d, Math.max(p, map1.getOrDefault(d, 0))); // 相同的难度,只保留报酬高的 } // 把难度高报酬低的工作过滤掉 TreeMap<Integer, Integer> map2 = new TreeMap<>(); Entry<Integer, Integer> preEntry = map1.firstEntry(); map2.put(preEntry.getKey(), preEntry.getValue()); for(Entry<Integer, Integer> e: map1.entrySet()){ if(e.getValue() > preEntry.getValue()){ map2.put(e.getKey(), e.getValue()); preEntry = e; } } params = br.readLine().split(" "); for(int i = 0; i < m; i++){ int Ai = Integer.parseInt(params[i]); int val = 0; if(map2.floorEntry(Ai) != null){ val = map2.floorEntry(Ai).getValue(); } System.out.println(val); } } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.Comparator; import java.util.TreeSet; class Node { int difficulty; int money; public Node() { } public Node(int difficulty, int money) { this.difficulty = difficulty; this.money = money; } } public class LookForJob { public static void main(String[] args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String[] str1 = reader.readLine().split(" "); int N = Integer.parseInt(str1[0]); int M = Integer.parseInt(str1[1]); TreeSet<Node> workSet = new TreeSet<>(new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { return o1.difficulty != o2.difficulty ? o1.difficulty - o2.difficulty : o2.money - o1.money; } }); Node[] workNode = new Node[N]; for (int i = 0; i < N; i++) { String[] s = reader.readLine().split(" "); workNode[i] = new Node(Integer.parseInt(s[0]), Integer.parseInt(s[1])); } Arrays.sort(workNode, new Comparator<Node>() { @Override public int compare(Node o1, Node o2) { return o1.difficulty != o2.difficulty ? o1.difficulty - o2.difficulty : o2.money - o1.money; } }); int diff = -1; int money = -1; for (int i = 0; i < workNode.length; i++) { if (workNode[i].difficulty == diff || workNode[i].money <= money) { } else { workSet.add(workNode[i]); diff = workNode[i].difficulty; money = workNode[i].money; } } String[] s = reader.readLine().split(" "); for (int i = 0; i < M; i++) { Node node = new Node(Integer.parseInt(s[i]), 0); if(workSet.floor(node) == null){ System.out.println(0); }else { System.out.println(workSet.floor(node).money); } } } }