传统题 1000ms 256MiB

颗秒,棒棒棒棒

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

题目描述

可爱猪猪 厌倦了为远程输出型英雄提供支援,现在她设计了一个关于支持区间查询的数据结构问题。

对于一个长度为 mm 的数组 b=[b1,b2,,bm]b = [b_1, b_2, \ldots, b_m],其中 bi=0b_i=0bi=1b_i=1,定义如下的“三元组移除”操作:

  1. 选择三个下标 1i<j<km1 \le i < j < k \le m,使得这三个位置上的元素相同(即 bi=bj=bkb_i = b_j = b_k)。
  2. 将这三个元素从数组中移除。该操作的代价为 min(kj,ji)\min(k-j, j-i)。移除后,剩余的数组连接起来,重新编号。

我们的目标是通过三元组移除操作,将数组 bb 变为空。数组的总代价定义为:将数组清空所需一系列三元组移除操作代价之和的最小值。如果无法将数组清空,则代价定义为 1-1

可爱猪猪 希望测试她的数据结构。为此,你需要回答 qq 个相互独立的查询。最初你会得到一个长度为 nn 的数组 a=[a1,a2,,an]a = [a_1, a_2, \ldots, a_n],其中 ai=0a_i=0ai=1a_i=1。对于每个查询,给定区间 1lrn1 \le l \le r \le n,你需要计算子数组 [al,al+1,,ar][a_l, a_{l+1}, \ldots, a_r] 的清空总代价。

输入格式

每个测试包含若干组数据。第一行为测试组数 tt1t1041 \le t \le 10^4)。每组测试数据包含:

第一行为两个整数 nnqq1n,q2500001 \le n, q \le 250\,000),分别表示数组长度和查询数。

第二行为 nn 个整数 a1,a2,,ana_1, a_2, \ldots, a_n,其中 ai=0a_i = 0ai=1a_i=1,表示数组元素。

随后 qq 行,每行两个整数 lil_irir_i1lirin1 \le l_i \le r_i \le n),表示第 ii 次查询的区间。

保证所有测试数据中 nn 之和不超过 250000250\,000qq 之和不超过 250000250\,000

输出格式

对于每组测试数据,输出 qq 行,每行一个整数,为第 ii 个查询的答案。

输入输出样例 #1

输入 #1

2
12 4
0 0 1 1 0 1 0 1 0 1 1 0
1 12
2 7
5 10
6 11
6 3
0 0 0 1 1 1
1 3
4 6
1 6

输出 #1

4
2
3
-1
1
1
2

说明/提示

第一组样例,第一条查询(1 12)的解释:

子数组为 [0,0,1,1,0,1,0,1,0,1,1,0][0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0]。其中有六个 00 和六个 11。一种可能的最优移除方案如下:

  1. 移除下标 334466 的三个 11。代价为 min(64,43)=min(2,1)=1\min(6-4, 4-3) = \min(2, 1) = 1。移除后数组为 [0,0,0,0,1,0,1,1,0][0, 0, 0, 0, 1, 0, 1, 1, 0]
  2. 移除下标 112233 的三个 00。代价为 min(32,21)=min(1,1)=1\min(3-2, 2-1) = \min(1, 1) = 1。移除后数组为 [0,1,0,1,1,0][0, 1, 0, 1, 1, 0]
  3. 移除下标 224455 的三个 11。代价为 min(54,42)=min(1,2)=1\min(5-4, 4-2) = \min(1, 2) = 1。移除后数组为 [0,0,0][0, 0, 0]
  4. 移除下标 112233 的三个 00。代价为 min(32,21)=min(1,1)=1\min(3-2, 2-1) = \min(1, 1) = 1。此时数组变为空。

总代价为 1+1+1+1=41+1+1+1=4

2025ACM新生积分赛 Round #3

未参加
状态
已结束
规则
ACM/ICPC
题目
13
开始于
2025-11-2 13:00
结束于
2025-11-2 18:00
持续时间
5 小时
主持人
参赛人数
53