//思路:将数据分别放进两个优先队列中 //一个存升序,存进入的;一个降序,存离开的 #include <iostream> #include <cstdio> #include <queue> #include <string> using namespace std; struct Enter{ string id; string entertime; Enter(string a,string b):id(a),entertime(b){} bool operator> (Enter e) const{ //重载运算符 return entertime>e.entertime; } }; struct Leave{ string id; string leavetime; Leave(string a,string b):id(a),leavetime(b){} bool operator< (Leave e) const{ //重载运算符 return leavetime<e.leavetime; } }; int main(){ int n; while(scanf("%d",&n)!=EOF){ priority_queue<Enter,vector<Enter>,greater<Enter>>enter;//改为二叉小根堆 priority_queue<Leave>leave; string number; string time1; string time2; for(int i=0;i<n;i++){ cin>>number>>time1>>time2; enter.push({number,time1}); leave.push({number,time2}); } cout<<enter.top().id<<" "<<leave.top().id<<endl; } return 0; }