/*
全部雇员都计算一遍之后在进行query,应该有更快的方法吧
*/
/*
Run Time: 0.7secs
Run Memory: 20812KB
*/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef struct Emp{
int id; //员工id,六位,唯一
int salary; //收入,最高10,000,000,唯一
int tall; //身高,1,000,000到2,500,000,可重复
int boss; //记录当前员工的boss号
int subCount; //记录当前员工的部下数量
};
int n; //case数
int m; //员工数,最多30000
int q; //query数,最多200
Emp dataID[1000001]; //雇员纪录,按照ID排放
vector<Emp> dataSal; //雇员记录,按照Salary排放
int queries[202]; //记录query
//按照Salary的排序因子
int cmpSalary(Emp a, Emp b){
return a.salary < b.salary;
}
void comput(){
sort(dataSal.begin(), dataSal.end(), cmpSalary);
//为每一个雇员计算其boss号以及部下数量,计算完一个人就把它放入数组
for(int i=0; i<m; i++){
for(int j=i+1; j<m; j++){
if(dataSal[i].tall <= dataSal[j].tall){
dataSal[i].boss = dataSal[j].id;
dataSal[j].subCount += dataSal[i].subCount + 1;
break;
}
}
dataID[dataSal[i].id] = dataSal[i];
}
//开始执行query
for(int i=0; i<q; i++){
cout << dataID[queries[i]].boss << " " << dataID[queries[i]].subCount << endl;
}
}
int main()
{
cin >> n;
while (n-->0){
cin >> m >> q;
dataSal.clear();
for(int i=0; i<m; i++){
Emp buf;
cin >> buf.id >> buf.salary >> buf.tall;
buf.boss = buf.subCount = 0;
dataSal.push_back(buf);
}
for(int i=0; i<q; i++)
cin >> queries[i];
comput();
}
return 0;
}
Sicily 1063. Who's the Boss
最新推荐文章于 2018-03-10 16:06:57 发布