两个指针分别指向当前时刻的赞以及往前推移d时刻的赞
当处理当前时刻的赞时,将后面的指针维护到(此时刻-d,此时刻]的区间,同时将非该区间的赞取消
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef pair<int, int> PII;
#define x first
#define y second
const int N = 1e5+5;
int n,d,k;
PII logs[N];
bool st[N];
int cnt[N];
int main()
{
cin>>n>>d>>k;
for (int i=0;i<=n;i++) cin>>logs[i].x>>logs[i].y;
sort(logs,logs+n);
for(int i=0,j=0;i<n;i++)
{
int t=logs[i].y;
cnt[t]++;//当前此人获得一个赞
while(logs[i].x-logs[j].x>=d)//将当前时刻推移d时刻之前的赞清除
{
cnt[logs[j].y]--;
j++;
}
if(cnt[t]>=k) st[t]=true;//此时此人赞数量满足
}
for (int i=0;i<N;i++)
if(st[i]) cout<<i<<endl;
}