AcWing 1238. 日志统计
原题链接
中等
作者:
你也叫依古比古吗
,
2020-09-13 00:03:41
,
所有人可见
,
阅读 625
超时代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int n,d,k;
const int N = 100010;
int cnt[N];
PII logs[N];
set<int> us;
int main()
{
cin >> n >> d >> k;
for(int i = 0;i < n;i ++) scanf("%d%d",&logs[i].first,&logs[i].second);
sort(logs,logs + n);
for(int i = 0;i < n; i ++)
{
int j = i;
unordered_map<int,int> um;
while(j < n && logs[j].first - logs[i].first < d)
{
um[logs[j].second]++;
j++;
}
for(auto x : um)
{
if(x.second >= k)
us.insert(x.first);
}
}
for(auto x : us)
{
printf("%d\n",x);
}
return 0;
}
AC代码
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> PII;
int n,d,k;
const int N = 100010;
int cnt[N];
PII logs[N];
bool st[N];
int main()
{
cin >> n >> d >> k;
for(int i = 0;i < n;i ++) scanf("%d%d",&logs[i].first,&logs[i].second);
sort(logs,logs + n);
for(int i = 0,j = 0;i < n;i++)
{
int x = logs[i].second;
cnt[x]++;
while(logs[i].first - logs[j].first >= d)
{
cnt[logs[j].second]--;
j++;
}
if(cnt[x] >= k) st[x] = true;
}
for(int i = 0;i < 100010;i++)
{
if(st[i])
printf("%d\n",i);
}
return 0;
}