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

每日一练社区's avatar
每日一练社区 已提交
3 4
**题目描述**

每日一练社区's avatar
每日一练社区 已提交
5 6 7 8 9 10 11 12 13 14 15 16 17 18
小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N 行。  

其中每一行的格式是:  
ts id  
表示在 ts 时刻编号 id 的帖子收到一个”赞”。

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

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

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

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

每日一练社区's avatar
每日一练社区 已提交
19 20
**输入格式**

每日一练社区's avatar
每日一练社区 已提交
21 22 23 24
第一行包含三个整数 N,D,K。

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

每日一练社区's avatar
每日一练社区 已提交
25 26
**输出格式**

每日一练社区's avatar
每日一练社区 已提交
27 28 29 30
按从小到大的顺序输出热帖 id。

每个 id 占一行。

每日一练社区's avatar
每日一练社区 已提交
31 32
**数据范围**

每日一练社区's avatar
每日一练社区 已提交
33 34 35 36 37
```
1≤K≤N≤10E5,
0≤ts,id≤10E5,
1≤D≤10000
```
每日一练社区's avatar
每日一练社区 已提交
38 39 40

**输入样例:**

每日一练社区's avatar
每日一练社区 已提交
41 42 43 44 45 46 47 48 49 50
```
7 10 2
0 1
0 10
10 10
10 1
9 1
100 3
100 3
```
每日一练社区's avatar
每日一练社区 已提交
51 52 53

**输出样例:**

每日一练社区's avatar
每日一练社区 已提交
54 55 56 57 58
```
1
3
```

每日一练社区's avatar
每日一练社区 已提交
59 60 61 62 63 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
下面的程序实现了这一功能,请你补全空白处的内容:

```cpp
#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
每日一练社区 已提交
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
## aop

### before

```cpp

```

### after

```cpp

```

## 答案

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

## 选项

### A

```cpp
每日一练社区's avatar
每日一练社区 已提交
123
cnt[logs[j].y]--; j++;
每日一练社区's avatar
每日一练社区 已提交
124 125 126 127 128
```

### B

```cpp
每日一练社区's avatar
每日一练社区 已提交
129
cnt[logs[j].y]++, j++;
每日一练社区's avatar
每日一练社区 已提交
130 131 132 133 134
```

### C

```cpp
每日一练社区's avatar
每日一练社区 已提交
135
cnt[logs[j].y]++; j++;
每日一练社区's avatar
每日一练社区 已提交
136
```