#P14574. [IATI 2025 Day 1]self_describing
[IATI 2025 Day 1]self_describing
题目描述
定义一个数组 是自描述数组,当且仅当对于数组中的每个元素 ,数值 在整个数组中恰好出现 次。
例如:
[1, 2, 2]是自描述数组;[5, 5, 5, 5, 5]是自描述数组;[3, 1, 3, 2, 3, 2]是自描述数组;
而下面这些不是:
[100, 1, 2, 2]不是,因为100只出现了 1 次;[1, 1, 1, 1, 1]不是,因为1出现了 5 次。
进一步地,若数组 本身是自描述数组,则称它为一个自描述子数组。
给定一个数组 ,以及 次询问 (满足 )。
对于每次询问,你需要求出有多少个子数组 满足:
- ;
- 子数组 是自描述子数组。
实现方式
你需要实现以下两个过程:
初始化
void init(int N, int Q, const std::vector<int>& a)
该函数在每个测试点中只会被调用一次,传入原数组 。
单次询问
long long query(int l, int r)
该函数会被调用 次,每次对应一个区间询问 ,你需要返回答案。
本地测试
本地 grader 会按如下格式读入数据:
- 数组
- 接下来 行,每行一个询问
然后它会先调用 init,再依次调用 query 并输出答案。
你可以自由修改本地 grader。
数据范围
样例
输入
7 3
1 2 1 2 3 3 3
0 3
2 6
0 6
输出
3
2
5
子任务
| 子任务 | 分值 | 依赖子任务 | 其他限制 | ||
|---|---|---|---|---|---|
| 0 | - | - | 样例 | ||
| 1 | 6 | 无 | |||
| 2 | 1 | 唯一询问是 | |||
| 3 | 39 | 1–2 | |||
| 4 | 11 | 0–3 | 无 | ||
| 5 | 16 | 0–4 | |||
| 6 | 22 | 0–5 | |||
只有通过某个子任务及其依赖的全部测试,才能获得该子任务分数。