用最大堆维护学生,遍历这个最大堆即可 -- top(); pop();
复杂度O(n)
代码:
#include <string>
#include <iostream>
#include <queue>
using namespace std;
class Student
{
public:
string name;
string id;
int grade;
Student(string& _name, string& _id, int _grade): name(_name), id(_id), grade(_grade) {}
friend bool operator< (const Student& a, const Student& b)
{
return a.grade < b.grade;
}
};
int main()
{
int n;
priority_queue<Student> q;
string name, id;
int grade, grade1, grade2;
bool none = true;
cin >> n;
while (n --)
{
cin >> name >> id >> grade;
q.push(Student(name, id, grade));
}
cin >> grade1 >> grade2;
while (q.empty() == false)
{
if (q.top().grade>=grade1 && q.top().grade<=grade2)
{
cout << q.top().name << " " << q.top().id << endl;
none = false;
}
q.pop();
}
cout << (none? "NONE": "");
return 0;
}