当前位置: 首页 > news >正文

日志统计(双指针)

题目描述

小明维护着一个程序员论坛。现在他收集了一份"点赞"日志,日志共有 NN 行。其中每一行的格式是:

ts idts id

表示在 tsts 时刻编号 idid 的帖子收到一个"赞"。

现在小明想统计有哪些帖子曾经是"热帖"。如果一个帖子曾在任意一个长度为 DD 的时间段内收到不少于 KK 个赞,小明就认为这个帖子曾是"热帖"。

具体来说,如果存在某个时刻 T 满足该帖在 [T,T+D)[T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 KK 个赞,该帖就曾是"热帖"。

给定日志,请你帮助小明统计出所有曾是"热帖"的帖子编号。

输入描述

输入格式:

第一行包含三个整数 N,D,KN,D,K。

以下 N 行每行一条日志,包含两个整数 ts 和 id。

其中,1≤K≤N≤105,0≤ts≤105,0≤id≤1051≤K≤N≤105,0≤ts≤105,0≤id≤105。

输出描述

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

输入输出样例

示例

输入

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

输出

1
3
import java.util.*;

public class LogStatistics {
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int d=scanner.nextInt();
        int k=scanner.nextInt();
        List<Integer> ans=new ArrayList<>();
        Map<Integer,List<Integer>> m=new HashMap<>();
        for(int i=0;i<n;i++){
            int ts=scanner.nextInt();
            int id=scanner.nextInt();
            m.computeIfAbsent(id,K->new ArrayList<>()).add(ts);
        }
        for(Map.Entry<Integer,List<Integer>> entry : m.entrySet()){
            List<Integer> times=entry.getValue();
            Collections.sort(times);
            if(fun(times,d,k)){
                ans.add(entry.getKey());
            }
        }
        Collections.sort(ans);
        for(int id:ans){
            System.out.println(id);
        }
    }
    public static boolean fun(List<Integer> times,int d,int k){
        int left=0;
        for(int right=0;right<times.size();right++){
            while(times.get(right)-times.get(left)>=d){
                left++;
            }
            if(right-left+1>=k){
                return true;
            }
        }
        return false;
    }
}

 

相关文章:

  • 做网站的专业术语网络营销方法有什么
  • 注册城乡规划师培训机构网站seo搜索
  • 除了WordPress等长春seo推广
  • 泰安网站建设入门推荐企业宣传片视频
  • 视频网站建设 知乎seo公司资源
  • 温州市城乡建设厅网站首页泸州网站优化推广
  • Chrome开发者工具实战:调试三剑客
  • 使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第六讲)
  • 新版pycharm如何实现debug调试需要参数的python文件
  • 【CSS】样式与效果
  • C语言之编译和debug工具
  • C++模板递归结构详解和使用
  • React中类组件的生命周期
  • 【51单片机】2-8【I/O口】数码管显示矩阵按键值
  • python通过调用海康SDK打开工业相机(全流程)
  • 论文修改时有哪些需要注意的问题?
  • Leedcode刷题 | Day23_回溯算法02
  • Latex入门之超详细的Latex下载安装教程
  • OpenCV图像处理实战全解析:镜像、缩放、矫正、水印与降噪技术详解
  • 算法设计学习10
  • React编程高级主题:错误处理(Error Handling)
  • ts基础知识总结
  • Java后端开发流程
  • [ctfshow web入门]burpsuite的下载与使用
  • 每日c/c++题 备战蓝桥杯(小球反弹)[运动分解求解,最大公约数gcd]
  • Java进阶之旅-day05:网络编程