#P15850. [NOISG 2026 Finals] Gemstones

[NOISG 2026 Finals] Gemstones

题目描述

你正在玩一个益智游戏,游戏中有 nn 颗宝石排成一行,从左到右编号为 11nn。第 ii 颗宝石的颜色为 c[i]c[i]

在任何时刻,你可以选择两颗相邻且颜色相同的宝石并将它们删除。然后,两侧的宝石会滑动以填补空隙,这可能会创造出新的相邻宝石对。

你将面对 qq 个独立的场景。在第 jj 个场景中,你只考虑从宝石 l[j]l[j] 开始到宝石 r[j]r[j] 结束的这一段宝石。假设你执行了最优的删除序列,最终最少可能剩下多少颗宝石?

输入格式

你的程序需要从标准输入读取数据。

输入的第一行包含两个由空格分隔的整数 nnqq

输入的第二行包含 nn 个由空格分隔的整数 c[1],c[2],,c[n]c[1], c[2], \ldots, c[n]

接下来的 qq 行输入,每行包含两个由空格分隔的整数。其中第 ii 行包含 l[i]l[i]r[i]r[i]

输出格式

你的程序需要向标准输出写入数据。

输出应包含 qq 行。其中第 ii 行应包含一个整数,即第 ii 个场景的答案。

8 4
3 3 3 2 2 3 4 7
1 3
3 6
1 7
5 8
1
0
1
4
6 3
2 1 1 2 2 1
1 6
1 4
3 6
2
0
0

提示

样例测试 #1 解释

n=8n = 8 颗宝石如下图所示。

:::align{center} :::

在第一个场景中,只考虑前三个宝石。删除任意两个相邻的宝石后,会恰好剩下一颗宝石,之后无法再进行任何删除。因此,答案是 11

在第二个场景中,可以按以下方式删除宝石,最终一颗不剩:

:::align{center} :::

在第三个场景中,可以按以下方式删除宝石,最终剩下一颗:

:::align{center} :::

在第四个场景中,无法删除任何宝石。因此,答案是 44

子任务

对于所有测试用例,输入数据满足以下限制:

  • 1n1061 \le n \le 10^6
  • 1q5000001 \le q \le 500\,000
  • 对于所有 1in1 \le i \le n,有 1c[i]1091 \le c[i] \le 10^9
  • 对于所有 1jq1 \le j \le q,有 1l[j]r[j]n1 \le l[j] \le r[j] \le n

你的程序将在满足以下限制的输入实例上进行测试:

子任务 分数 额外约束条件
0 样例测试用例
1 2 c[1]=c[2]==c[n]c[1] = c[2] = \cdots = c[n]
2 5 相同颜色的宝石形成一个连续的子数组(如果 c[i]=c[j]c[i] = c[j]i<ji < j,那么 c[i]=c[i+1]==c[j]c[i] = c[i+1] = \cdots = c[j]
3 9 n,q2000n, q \le 2000
4 对于所有 1jq1 \le j \le q,有 l[j]=1l[j] = 1
5 8 每种颜色恰好有两颗宝石
6 16 对于所有 1in1 \le i \le n,有 c[i]2c[i] \le 2
7 18 n,q100000n, q \le 100\,000
8 15 n,q300000n, q \le 300\,000
9 23 无额外约束

翻译由 DeepSeek V3.2 完成