solution.md 2.0 KB
Newer Older
每日一练社区's avatar
每日一练社区 已提交
1 2 3 4 5 6 7
# 日志统计

**题目描述**

小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N 行。  

其中每一行的格式是:  
每日一练社区's avatar
每日一练社区 已提交
8

每日一练社区's avatar
每日一练社区 已提交
9
ts id  
每日一练社区's avatar
每日一练社区 已提交
10

每日一练社区's avatar
每日一练社区 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
表示在 ts 时刻编号 id 的帖子收到一个”赞”。

现在小明想统计有哪些帖子曾经是”热帖”。  

如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是”热帖”。

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

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

**输入格式**

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

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

**输出格式**

按从小到大的顺序输出热帖 id。

每个 id 占一行。

**数据范围**

```
1≤K≤N≤10E5,
0≤ts,id≤10E5,
1≤D≤10000
```

**输入样例:**

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

**输出样例:**

```
1
3
```

下面的程序实现了这一功能,请你补全空白处的内容:

每日一练社区's avatar
每日一练社区 已提交
63
```c
每日一练社区's avatar
每日一练社区 已提交
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
#include <bits/stdc++.h>
using namespace std;

const int N = 1e5 + 10;
typedef pair<int, int> PII;
#define x first
#define y second
PII logs[N];
bool st[N];
int cnt[N];

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

    sort(logs, logs + n);

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

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

## 答案

每日一练社区's avatar
每日一练社区 已提交
102
```c
每日一练社区's avatar
每日一练社区 已提交
103 104 105 106 107 108 109
cnt[logs[j].y]--, j++;
```

## 选项

### A

每日一练社区's avatar
每日一练社区 已提交
110
```c
每日一练社区's avatar
每日一练社区 已提交
111 112 113 114 115
cnt[logs[j].y]--; j++;
```

### B

每日一练社区's avatar
每日一练社区 已提交
116
```c
每日一练社区's avatar
每日一练社区 已提交
117 118 119 120 121
cnt[logs[j].y]++, j++;
```

### C

每日一练社区's avatar
每日一练社区 已提交
122
```c
每日一练社区's avatar
每日一练社区 已提交
123 124
cnt[logs[j].y]++; j++;
```