题目描述
题目分析
本题可以使用双指针来维护时间段的区间,在维护的时间段内确定是否为热帖
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10;
struct node
{
int t, id;
}tiee[N];
int n, d, k, cnt[N];
set<int> st;
bool cmp(node a, node b)
{
return a.t < b.t;
}
int main()
{
cin >> n >> d >> k;
for(int i = 1; i <= n; i ++)
{
cin >> tiee[i].t >> tiee[i].id;
}
sort(tiee + 1, tiee + 1 + n, cmp);
for(int i = 1, j = 1; i <= n; i ++)
{
cnt[tiee[i].id] ++;//cnt[id]表示同一个id获赞数
while(tiee[i].t - tiee[j].t >= d)//两个帖子的时间相差超过d说明该赞无效
{
cnt[tiee[j].id] --;//无效的id需要被减掉
j ++;
}
int x = tiee[i].id;
if(cnt[tiee[i].id] >= k)st.insert(x);//set自动排序去重
}
for(auto i : st)cout << i << '\n';
return 0;
}