AcWing 1238. 日志统计——维护一个定长为k的队列即可
原题链接
中等
作者:
坚决杀毒
,
2021-04-14 00:16:43
,
所有人可见
,
阅读 401
代码
#include <cstdio>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <vector>
#include <queue>
#include <cmath>
using namespace std;
vector<int> vec[101010];
vector<int> ans;
int n,d,k;
int main(int argc, char const *argv[])
{
cin>>n>>d>>k;
for(int i=1;i<=n;i++)
{
int t,id;
cin>>t>>id;
vec[id].push_back(t);
}
for(int i=1;i<=100000;i++)
{
sort(vec[i].begin(), vec[i].end());
}
for(int A=1;A<=100000;A++)
{
if(vec[A].size()<k)continue;
queue<int> que;
for(int i=0;i<vec[A].size();i++)
{
if(que.size()<k){que.push(vec[A][i]);}
if(que.size()>=k)
{
int fir = que.front();
int last = que.back();
if(last-fir<=d-1){ans.push_back(A);break;}
while(que.back()-que.front()>d-1)que.pop();
}
}
}
for(auto x : ans)
{
cout<<x<<endl;
}
system("pause");
return 0;
}