# 日志统计 **题目描述** 小明维护着一个程序员论坛。现在他收集了一份”点赞”日志,日志共有 N 行。 其中每一行的格式是: ts id 表示在 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 ``` 下面的程序实现了这一功能,请你补全空白处的内容: ```cpp #include using namespace std; const int N = 1e5 + 10; typedef pair 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; } ``` ## aop ### before ```cpp ``` ### after ```cpp ``` ## 答案 ```cpp cnt[logs[j].y]--, j++; ``` ## 选项 ### A ```cpp cnt[logs[j].y]--; j++; ``` ### B ```cpp cnt[logs[j].y]++, j++; ``` ### C ```cpp cnt[logs[j].y]++; j++; ```