AcWing 1238. 日志统计
原题链接
中等
作者:
阿猫阿狗
,
2025-04-10 16:53:58
· 北京
,
所有人可见
,
阅读 2
using namespace std;
const int N=1e5+10;
typedef pair<int,int> PII;
int n,d,k;
priority_queue<int,vector<int>,greater<int> >q[N];//优先队列用来维护第id个帖子点赞数
int s[N],cnt[N];//s数组记录帖子id当前时刻点赞数,cnt是最后用来判断帖子是否成为过热帖
PII a[N];
bool cmp(PII x,PII y){
return x.ts<y.ts;
}//对日志信息按时刻ts从小到大排序
int main(){
cin>>n>>d>>k;
for(int i=1;i<=n;i++){
cin>>a[i].ts>>a[i].id;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
s[a[i].id]++;
q[a[i].id].push(a[i].ts+d);
while(q[a[i].id].size()&&q[a[i].id].top()<=a[i].ts){
s[a[i].id]--;
q[a[i].id].pop();
}//优先队列里记录的是该帖子的点赞效果最多持续到什么时刻,对于当前时刻ts-d之前的点赞效果都已失效,故s--
if(s[a[i].id]>=k) {
cnt[a[i].id]=1;//记录成为热帖的帖子
s[a[i].id]=-10000;
}
}
for(int i=1;i<=N;i++){
if(cnt[i]==1) cout<<i<<endl;
}
}