[P8661 蓝桥杯 2018 省 B] 日志统计 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
思路:双指针,对日志按时间从小到大进行排序。快指针指向的 i d id id点赞数加一,快慢指针做差得到之间的时间间隔,大于等于 k k k将慢指针指向的 i d id id点赞数减一,慢指针加一进行循环判断。如果循环结束, c n t [ i d ] > k cnt[id] > k cnt[id]>k则是热帖,进行标记。
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 21;
int cnt[N],vis[N];
int main()
{
int n,d,k; cin>>n>>d>>k;
vector<pair<int,int>> tm(n);
for(auto &t: tm) cin>>t.first>>t.second;
sort(tm.begin(),tm.end());
for(int i = 0, j = 0; i < n; ++i) {
int id = tm[i].second;
cnt[id]++;
while(j < n && tm[i].first - tm[j].first >= d) {
cnt[tm[j].second]--;
++j;
}
if(cnt[id] >= k) vis[id] = 1;
}
for(int i = 0; i <= 1e5 + 20; ++i) {
if(vis[i]) cout<<i<<endl;
}
}