思路
通过
map<int,vector<int>>
存取每条信息所对应的时间,通过对时间排序后,使用双指针,从小到大移动即可
#include<bits/stdc++.h>
using namespace std;
int n,d,k;
int main(){
map<int,vector<int>> hash;
cin>>n>>d>>k;
int ts,id;
while(n--){
cin>>ts>>id;
hash[id].push_back(ts);
}
map<int,vector<int>>::iterator it;
for(it = hash.begin();it!=hash.end();it++){
//cout<<it->first<<endl;
int cnt = 0;
sort(it->second.begin(),it->second.end());
for(int i=0,j=0;i<it->second.size();i++){
cnt++;
while(it->second[i]>=it->second[j]+d){
j++;
cnt--;
}
if(cnt>=k){
cout<<it->first<<endl;
break;
}
}
}
return 0;
}