题目描述
日志统计 - 蓝桥云课 (lanqiao.cn)
题目分析
本题可以使用双指针来维护时间段的区间,在维护的时间段内确定是否为热帖
#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;
}