首页 > 其他 > 详细

[蓝桥杯2018初赛]日志统计

时间:2020-02-04 00:06:16      阅读:135      评论:0      收藏:0      [点我收藏+]
小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有N行。
其中每一行的格式是:ts id。表示在ts时刻编号id的帖子收到一个"赞"。  
现在小明想统计有哪些帖子曾经是"热帖"。
如果一个帖子曾在任意一个长度为D的时间段内收到不少于K个赞,小明就认为这个帖子曾是"热帖"。  
具体来说,如果存在某个时刻T满足该帖在[T, T+D)这段时间内(注意是左闭右开区间)收到不少于K个赞,该帖就曾是"热帖"。  
给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。  

输入

第一行包含三个整数N、D和K。  
以下N行每行一条日志,包含两个整数ts和id。 
1 <= K <= N <= 100000 0 <= ts <= 100000 0 <= id <= 100000  

输出

按从小到大的顺序输出热帖id。每个id一行。

样例输入 Copy

7 10 2  
0 1  
0 10    
10 10  
10 1  
9 1
100 3  
100 3 

样例输出 Copy

1
3

代码实现
#include<iostream>
#include<algorithm>
using namespace std;

#define x first
#define y second

const int N = 1e5 + 10;

typedef pair<int,int> PII;

PII q[N];

int cnt[N];
bool st[N];

int n,d,k;

int main(){
    
  cin >> n >> d >> k;
  
  for(int i = 0;i < n;i++) cin >> q[i].x >> q[i].y;
  
  	sort(q,q+n);

  for(int i = 0,j = 0;i < n;i++){
      cnt[q[i].y] ++;
      while(q[i].x - q[j].x >= d){
          cnt[q[j].y] --;
          j ++;
      }
      
      if(cnt[q[i].y] >= k) st[q[i].y] = true;

  }
  
  for(int i = 0;i <= 100000;i++) if(st[i]) cout << i << endl;
  
  return 0;
      
}

  

 

[蓝桥杯2018初赛]日志统计

原文:https://www.cnblogs.com/luyuan-chen/p/12257974.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!