P15850 [NOISG 2026 Finals] 宝石 / Gemstones【暂无数据】

题目描述

你正在玩一个益智游戏,游戏中有 $n$ 颗宝石排成一行,从左到右编号为 $1$ 到 $n$。第 $i$ 颗宝石的颜色为 $c[i]$。 在任何时刻,你可以选择两颗**相邻且颜色相同**的宝石并将它们删除。然后,两侧的宝石会滑动以填补空隙,这可能会创造出新的相邻宝石对。 你将面对 $q$ 个独立的场景。在第 $j$ 个场景中,你只考虑从宝石 $l[j]$ 开始到宝石 $r[j]$ 结束的这一段宝石。假设你执行了最优的删除序列,最终**最少**可能剩下多少颗宝石?

输入格式

你的程序需要从标准输入读取数据。 输入的第一行包含两个由空格分隔的整数 $n$ 和 $q$。 输入的第二行包含 $n$ 个由空格分隔的整数 $c[1], c[2], \ldots, c[n]$。 接下来的 $q$ 行输入,每行包含两个由空格分隔的整数。其中第 $i$ 行包含 $l[i]$ 和 $r[i]$。

输出格式

你的程序需要向标准输出写入数据。 输出应包含 $q$ 行。其中第 $i$ 行应包含一个整数,即第 $i$ 个场景的答案。

说明/提示

### 样例测试 #1 解释 $n = 8$ 颗宝石如下图所示。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/9zhlltj2.png) ::: 在第一个场景中,只考虑前三个宝石。删除任意两个相邻的宝石后,会恰好剩下一颗宝石,之后无法再进行任何删除。因此,答案是 $1$。 在第二个场景中,可以按以下方式删除宝石,最终一颗不剩: :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/kikzg3py.png) ::: 在第三个场景中,可以按以下方式删除宝石,最终剩下一颗: :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/nup1471y.png) ::: 在第四个场景中,无法删除任何宝石。因此,答案是 $4$。 ### 子任务 对于所有测试用例,输入数据满足以下限制: - $1 \le n \le 10^6$ - $1 \le q \le 500\,000$ - 对于所有 $1 \le i \le n$,有 $1 \le c[i] \le 10^9$ - 对于所有 $1 \le j \le q$,有 $1 \le l[j] \le r[j] \le n$ 你的程序将在满足以下限制的输入实例上进行测试: | 子任务 | 分数 | 额外约束条件 | |:-------:|:-----:|:----------------------:| | 0 | 0 | 样例测试用例 | | 1 | 2 | $c[1] = c[2] = \cdots = c[n]$ | | 2 | 5 | 相同颜色的宝石形成一个连续的子数组(如果 $c[i] = c[j]$ 且 $i < j$,那么 $c[i] = c[i+1] = \cdots = c[j]$) | | 3 | 9 | $n, q \le 2000$ | | 4 | 4 | 对于所有 $1 \le j \le q$,有 $l[j] = 1$ | | 5 | 8 | 每种颜色恰好有两颗宝石 | | 6 | 16 | 对于所有 $1 \le i \le n$,有 $c[i] \le 2$ | | 7 | 18 | $n, q \le 100\,000$ | | 8 | 15 | $n, q \le 300\,000$ | | 9 | 23 | 无额外约束 | 翻译由 DeepSeek V3.2 完成