1 #include <cstdio>
2 #include <algorithm>
3 using namespace std;
4 struct Emp{
5 int id, salary, height, boss, sub;
6 Emp(int i=0, int s=0, int h=0, int b=0, int sb=0) :
7 id(i), salary(s), height(h), boss(b), sub(sb) {}
8 } emp[30000];
9 bool cmp(Emp a, Emp b) {
10 return a.salary < b.salary;
11 }
12 int main() {
13 int t;
14 scanf("%d", &t);
15 while (t--) {
16 int m, q;
17 scanf("%d%d", &m, &q);
18 for (int i = 0; i < m; i++) {
19 int id, sal, hei;
20 scanf("%d%d%d", &id, &sal, &hei);
21 emp[i] = Emp(id, sal, hei); // Boss id 与 subordinate 默认为 0
22 }
23 // 按薪水升序排序
24 sort(emp, emp+m, cmp);
25 // 找直属上司,计算下属数量
26 for (int i = 0; i < m-1; i++) {
27 // 直属上司在数组中对应的下标 boss
28 int boss = -1;
29 for (int j = i+1; j < m; j++)
30 if (emp[j].height >= emp[i].height) {
31 boss = j;
32 break;
33 }
34 if (boss != -1) {
35 emp[i].boss = emp[boss].id;
36 emp[boss].sub += emp[i].sub + 1;
37 }
38 }
39 for (int i = 0; i < q; i++) {
40 int query;
41 scanf("%d", &query);
42 int j, index = m-1;
43 for (j = 0; j < m; j++) // 找到要查询的对象对应的下标 index
44 if (emp[j].id == query) {
45 index = j;
46 break;
47 }
48 printf("%d %d\n", emp[index].boss, emp[index].sub);
49 }
50 }
51 }