一开始是超时的,因为两个for循环全遍历了,后来把算法优化了不用全遍历就AC了。
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int noToSub[1000000];
int noToBoss[1000000];
struct em{
int no;
int sal;
int height;
int sub;
int boss;
};
bool compare(const em& a, const em& b) {
if(a.sal > b.sal) {
return false;
}
return true;
}
int main() {
int cases;
scanf("%d", &cases);
while(cases--) {
int numOfEmp, numOfQue;
scanf("%d %d", &numOfEmp, &numOfQue);
em e[numOfEmp];
for(int i = 0; i < numOfEmp; i++) {
scanf("%d %d %d", &e[i].no, &e[i].sal, &e[i].height);
e[i].sub = 0;
e[i].boss = 0;
}
sort(e, e+numOfEmp, compare);
/*for(int i = 0; i < numOfEmp; i++) {
cout << e[i].no << ' ' << e[i].sal << ' ' << e[i].height << endl;
}*/
for(int i = 0; i < numOfEmp; i++) {
for(int j = i + 1; j < numOfEmp; j++) {
if(e[j].sal > e[i].sal && e[j].height >= e[i].height) {
e[i].boss = e[j].no;
e[j].sub += (e[i].sub + 1);
break;
}
}
noToSub[e[i].no] = e[i].sub;
noToBoss[e[i].no] = e[i].boss;
}
for(int i = 0; i < numOfQue; i++) {
int queNo;
scanf("%d", &queNo);
printf("%d %d\n", noToBoss[queNo], noToSub[queNo]);
}
}
return 0;
}