sicily 1063
#include <iostream>
#include <vector>
#include <algorithm>
#include <stdlib.h>
using namespace std;
struct Employee {
int ID, salary, height, fatherID, childNum;
vector<int> child;
};
bool myCmp(const Employee a, const Employee b) {
return a.salary > b.salary;
}
int main(int argc, char **argv)
{
int cases;
cin >> cases;
int employeeNum, queryNum;
int i, j;
Employee employee[30000];
while (cases--) {
cin >> employeeNum >> queryNum;
for (i = 0; i < employeeNum; i++) {
cin >> employee[i].ID >> employee[i].salary >> employee[i].height;
employee[i].childNum = 0;
employee[i].child.clear();
}
sort(employee, employee+employeeNum, myCmp);
for (i = employeeNum-1; i >= 0; i--) {
for (j = i-1; j >= 0; j--) {
if (employee[j].height >= employee[i].height) break;
}
if (j >= 0) {
employee[i].fatherID = employee[j].ID;
employee[j].child.push_back(i);
} else {
employee[i].fatherID = -1;
}
}
for (i = employeeNum-1; i >=0 ; i--) {
int x = employee[i].child.size() ;
if (x > 0) {
for (j = 0; j < x; j++) {
employee[i].childNum += employee[employee[i].child[j]].childNum+1;
}
}
}
int queryID;
for (int k = 0; k < queryNum; k++) {
cin >> queryID;
for (j = 0; j < employeeNum; j++) {
if (employee[j].ID == queryID) {
break;
}
}
if (employee[j].fatherID == -1)
cout << "0 " << employee[j].childNum << endl;
else cout << employee[j].fatherID << " " << employee[j].childNum << endl;
//else cout << employee[employee[j].fatherID].ID << " " << employee[j].childNum << endl;
}
}
system("pause");
return 0;
}