该企业为一个树形结构。
构造该企业的树形结构即可。
#include <iostream>
#include <cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
const int maxn=30009;
struct node
{
int id;
int sal;
int hig;
int boos;
int nsub;
}emp[maxn];
bool cmp(const node& a,const node& b)
{
return a.sal<b.sal;
}
int main()
{
int casei;
scanf("%d",&casei);
while(casei--)
{
map<int,int> ma;
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++)
{
scanf("%d%d%d",&emp[i].id,&emp[i].sal,&emp[i].hig);
emp[i].nsub=0;
// emp[i].boos=0;
}
sort(emp,emp+n,cmp);
for(int i=n-2;i>=0;i--)
{
int b=i+1;
while(emp[b].hig<emp[i].hig) b=emp[b].boos;
emp[i].boos=b;
}
for(int i=0;i<n-1;i++)
emp[emp[i].boos].nsub+=emp[i].nsub+1;
for(int i=0;i<n;i++)
ma[emp[i].id]=i;
for(int i=0;i<m;i++)
{
int t;
scanf("%d",&t);
int f=ma[t];
if(f==n-1)
printf("%d %d\n",0,emp[f].nsub);
else
printf("%d %d\n",emp[emp[f].boos].id,emp[f].nsub);
}
}
return 0;
}