小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 NN 行。
其中每一行的格式是:
ts id
表示在 tsts 时刻编号 idid 的帖子收到一个”赞”。
现在小明想统计有哪些帖子曾经是”热帖”。
如果一个帖子曾在任意一个长度为 DD 的时间段内收到不少于 KK 个赞,小明就认为这个帖子曾是”热帖”。
具体来说,如果存在某个时刻 TT 满足该帖在 [T,T+D)[T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 KK 个赞,该帖就曾是”热帖”。
给定日志,请你帮助小明统计出所有曾是”热帖”的帖子编号。
输入格式
第一行包含三个整数 N,D,KN,D,K。
以下 NN 行每行一条日志,包含两个整数 tsts 和 idid。
输出格式
按从小到大的顺序输出热帖 idid。
每个 idid 占一行。
数据范围
1≤K≤N≤1051≤K≤N≤105,
0≤ts,id≤1050≤ts,id≤105,
1≤D≤100001≤D≤10000
输入样例:
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3
输出样例:
1
3
import java.util.*;
public class Main{
static final int N = 100005;
static int []cnt = new int [N];
static node []arr = new node [N];
static boolean [] flag = new boolean [N];
static class cmp implements Comparator<node>{
public int compare(node a,node b) {
return a.x - b.x;
}
}
static class node{
int x,y;
node(int x,int y){
this.x = x;
this.y = y;
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int d = sc.nextInt();
int k = sc.nextInt();
for(int i = 0;i < n;i ++) {
int x = sc.nextInt();
int y = sc.nextInt();
arr[i] = new node(x,y);
}
Arrays.sort(arr,0,n,new cmp());
for(int i = 0,j = 0;i < n;i ++) {
int id = arr[i].y;
cnt[id] ++;
while(arr[i].x - arr[j].x >= d) {
cnt[arr[j].y] --;
j ++;
}
if(cnt[id] >= k) {
flag[id] = true;
}
}
for(int i = 0;i <= 100000;i ++) {
if(flag[i]) {
System.out.println(i);
}
}
}
}