参考代码:
#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;
}