参考代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<int> v[100005]; //定义容器用于存放第i篇帖子被点赞的时间
int main()
{
ios::sync_with_stdio(false);
int n, d, k;
cin >> n >> d >> k;
int ts, id;
for(int i = 0; i < n; i++)
{
cin >> ts >> id;
v[id].push_back(ts);
}
for(int i = 0; i < 100005; i++) //最多有个100000篇帖子,进行循环
{
int len = v[i].size(); //第i篇帖子收到的点赞数
if(len > 0)
{
sort(v[i].begin(), v[i].end()); //对点赞的时刻数从小到大排序
//请注意n的值最大也就100000,分配到每个v[i]数量不会很大,因此排序不会超时
int head = 0, tail = -1, sum = 0; //定义头尾指针,以及尺取的和
while(tail < len) //循环条件是尾指针没有超出边界
{
sum++; //循环一开始首先尺取和+1,随后将tail指针向后移动一位
tail++; //请注意起初tail指针是-1
if(tail == len)
break; //指针没有到达边界退出循环
while(v[i][tail] - v[i][head] > d-1) //当头尾指针尺取的时间段超出d时,移动head指针
{
sum--; //移动head指针时,需要将尺取的和-1
head++;
}
if(sum >= k) //当尺取和满足要求,即输出是热门帖子
{
cout << i << endl;
break;
}
}
}
}
return 0;
}