小红经营着一家创意烘焙坊,店内共有 N 种编号为 0 ... N-1 的不同款式慕斯模具。在今天的生产流水线上,小红记录了 M 次模具的使用信息。第 m 次记录显示,在时间点 j_m 使用了编号为 i_m 的模具。 为了优化清洗流程,小红提出了 K 个查询。每个查询由一个起始时间 S_k 和一个固定的时间跨度 X 组成,代表观察的时间区间为 [S_k, S_k + X - 1] (闭区间)。对于每个查询,小红想知道在这个时间区间内,使用了多少种不同编号的模具。
第一行包含三个整数 N, X, K ( 1 ≤ N, X, K ≤ 10^5 ),分别表示模具的总数、查询的时间跨度长度以及查询的数量。 第二行包含 K 个整数 S_1, S_2, ..., S_K ( 0 ≤ S_k ≤ 10^5 ),表示每个查询区间的起始时间。 第三行包含一个整数 M ( 1 ≤ M ≤ 10^5 ),表示模具的使用记录总数。 接下来的 M 行,每行包含两个整数 i_m 和 j_m ( 0 ≤ i_m < N, 0 ≤ j_m ≤ 10^5 ),表示在时间 j_m 使用了编号为 i_m 的模具。
输出一行 K 个整数,每两个整数之间用空格分隔,依次对应每个查询区间内不同模具的种类数。
4 2 2 3 4 4 2 4 2 3 1 2 3 5
1 2
考点:前缀和
数据规模 N ≤ 1e5 | 限制 3 秒 / 256MB | 标准输入输出
推荐方向:前缀和
本题切入点
查询区间固定长度 X 的不同模具种类数:对每个种类算出它能贡献的起始时间区间(左端点范围),用差分数组累加,查询时 O(1) 取值。
预处理前缀和数组,把「区间求和」从 O(n) 降到 O(1)。
思路框架(前缀和 通法 · 非本题专属)
实现要点:开 long long,避免 n 较大时求和溢出。
复杂度:时间 预处理 O(n),每次查询 O(1) | 空间 O(n)
该范式的通法易错点
对照本题
样例 1:输入 4 2 2 / 3 4 / 4 / 2 4 / 2 3 / 1 2 / 3 5 → 输出 1 2
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-1月22号开发岗。