分析
把所有日志按照时间先后顺序排序,然后利用双指针法,维护一个长度为 D 的区间,当存在点赞数大于等于 K 的帖子时,就将它记录下来。
C++代码
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
int n, d, k;
PII logs[100010];
int cnt[100010];
bool st[100010];// 是否热帖
int main()
{
scanf("%d%d%d", &n, &d, &k);
for (int i = 0; i < n; i++)
{
scanf("%d%d", &logs[i].first, &logs[i].second);
}
sort(logs, logs + n);
for (int i = 0, j = 0; i < n; i++)
{
int id = logs[i].second;
cnt[id]++;
while (logs[i].first - logs[j].first >= d)
{
cnt[logs[j].second]--;
j++;
}
if (cnt[id] >= k) st[id] = true;
}
for (int i = 0; i < 100010; i++)
if (st[i])
printf("%d\n", i);
return 0;
}
内存超限咋办