AcWing 1238. 日志统计(小根堆做法)
原题链接
中等
作者:
Theshot
,
2025-04-09 20:32:48
· 山西
,
所有人可见
,
阅读 15
C++ 代码
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;
typedef pair<int,int>PII;
const int N = 1e5 + 10;
int n,d,k;
int cnt[N];
int res[N];
bool st[N];
priority_queue<int,vector<int>,greater<int>>heap[N];
vector<PII>vec;
int main()
{
cin>>n>>d>>k;
for(int i = 0;i < n;i ++)
{
int ts,id;
cin>>ts>>id;
vec.push_back({ts,id});
}
sort(vec.begin(),vec.end());
for(int i = 0;i < n;i ++)
{
int ts = vec[i].first, id = vec[i].second;
while(heap[id].size() && heap[id].top() + d <= ts )
{
cnt[id] --;
heap[id].pop();
}
cnt[id] ++;
heap[id].push(ts);
if(cnt[id] >= k) st[id] = true;
}
for(int i = 0;i < 100000;i ++)
if(st[i]) cout<<i<<endl;
}