题目描述
啊 过了 听了y总的思路 我只能写出这样的代码 感觉y总的好简洁
代码
//日志统计
#include <iostream>
#include <cstdio>
#include <cstring>
#include<vector>
#include <algorithm>
using namespace std;
const int N=100005;
vector<int> t[N];
int cnt[N];//每个帖子收到的赞的数量
bool ans[N];
int n,d,k;
int ts,id;
int main()
{
cin>>n>>d>>k;
for(int i=0;i<n;i++)
{
scanf("%d%d",&ts,&id);
t[ts].push_back(id);//按照时间存起来
}
//遍历时间段 同时循环ij两个下标
for(int i=0;i<d;i++)//初始化
{
for(int j=0;j<t[i].size();j++)
{
cnt[t[i][j]]++;
if(cnt[t[i][j]]==k) ans[t[i][j]]=true;
}
}
for(int i=0,j=d;i<N-d,j<N;i++,j++)//之后遍历每个d区间时只有两段的数值发生了变化
{
//首时间减去
for(int u=0;u<t[i].size();u++)
{
cnt[t[i][u]]--;
}
//尾时间加上
for(int v=0;v<t[j].size();v++)
{
cnt[t[j][v]]++;
if(cnt[t[j][v]]>=k) ans[t[j][v]]=true;
}
}
for(int i=0;i<N;i++)
{
if(ans[i]) printf("%d\n",i);
}
return 0;
}