QOJ.ac

QOJ

时间限制: 1 s 内存限制: 1024 MB 总分: 100

#10296. 机器人

统计

Funnyland 被建模为一个大小为 $(h + 2) \times (w + 2)$ 的网格。网格的行从上到下编号为 $0$ 到 $h + 1$,列从左到右编号为 $0$ 到 $w + 1$。我们将位于第 $r$ 行第 $c$ 列的单元格称为单元格 $(r, c)$。

最初,网格中的所有单元格均为白色,最右侧一列除外,该列的所有单元格均为黑色。

第 $1$ 到 $w$ 列中每一列都恰好包含一个特殊单元格。这些特殊单元格中的每一个都要被涂成红色或蓝色。网格的边缘(即最顶行、最底行、最左列和最右列)永远不会包含特殊单元格。

若干机器人将被放置在最左列的单元格上,并根据其所在单元格的颜色移动:

  • 如果单元格是白色的,机器人向右移动。
  • 如果单元格是红色的,机器人向上移动。
  • 如果单元格是蓝色的,机器人向下移动。
  • 如果单元格是黑色的,机器人不移动。

机器人之间不会发生碰撞;每个机器人独立于其他机器人移动。允许多个机器人占据同一个单元格。

一个询问包含两个整数 $a$ 和 $b$ ($1 \le a < b \le h$)。对于每个 $a \le c \le b$,都有一个机器人从 $(c, 0)$ 出发。在所有可能的特殊单元格涂色方案(红色或蓝色)中,确定机器人最终能够占据的互不相同的单元格数量的最小值。

注意,不同的询问可能导致特殊单元格被涂成不同的颜色配置。

输入格式

程序必须从标准输入读取数据。

第一行包含两个空格分隔的整数 $h$ 和 $w$。

第二行包含 $w$ 个空格分隔的整数 $x[1], x[2], \dots, x[w]$,表示特殊单元格位于 $(x[1], 1), (x[2], 2), \dots, (x[w], w)$。

第三行包含一个整数 $q$。

接下来的 $q$ 行,每行包含两个空格分隔的整数。第 $i$ 行包含 $a[i]$ 和 $b[i]$。

输出格式

程序必须输出到标准输出。

输出应包含 $q$ 行。第 $i$ 行应包含一个整数,即第 $i$ 个询问的答案。

子任务

对于所有测试用例,输入满足以下范围:

  • $1 \le w, q \le 200\,000$
  • $2 \le h \le 200\,000$
  • $1 \le x[j] \le h$,对于所有 $1 \le j \le w$
  • $1 \le a[i] < b[i] \le h$,对于所有 $1 \le i \le q$

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

子任务 分值 附加限制
0 0 样例测试用例
1 10 $h, w \le 16, q \le 20$
2 4 $a[i] + 1 = b[i]$
3 12 $x[1] < x[2] < \dots < x[w]$
4 43 $h, w, q \le 5000$
5 31 无附加限制

样例

样例输入 1

4 4
3 2 4 1
3
1 4
1 3
2 4

样例输出 1

2
1
1

说明 1

网格颜色配置如下,特殊单元格以紫色标出:

对于第一个询问,我们可以将位于 $(3, 1)$ 和 $(4, 3)$ 的特殊单元格涂成蓝色,将 $(2, 2)$ 和 $(1, 4)$ 涂成红色,以达到以下效果:

  • 从 $(1, 0)$ 出发的机器人移动到 $(1, 1), (1, 2), (1, 3), (1, 4), (0, 4), (0, 5)$,最终停在 $(0, 5)$。
  • 从 $(2, 0)$ 出发的机器人移动到 $(2, 1), (2, 2), (1, 2), (1, 3), (1, 4), (0, 4), (0, 5)$,最终停在 $(0, 5)$。
  • 从 $(3, 0)$ 出发的机器人移动到 $(3, 1), (4, 1), (4, 2), (4, 3), (5, 3), (5, 4)$,最终停在 $(5, 5)$。
  • 从 $(4, 0)$ 出发的机器人移动到 $(4, 1), (4, 2), (4, 3), (5, 3), (5, 4)$,最终停在 $(5, 5)$。

机器人最终停在 $2$ 个不同的单元格 $(0, 5)$ 和 $(5, 5)$ 上,因此正确输出为 $2$。

对于第二个询问,我们可以将特殊单元格涂色如下:

从 $(1, 0), (2, 0)$ 和 $(3, 0)$ 出发的机器人最终都停在 $(0, 5)$。

对于第三个询问,我们可以将特殊单元格涂色如下:

从 $(2, 0), (3, 0)$ 和 $(4, 0)$ 出发的机器人最终都停在 $(3, 5)$。

样例输入 2

15 16
5 15 3 4 13 8 3 7 14 6 2 10 11 12 9 1
20
4 10
7 15
5 15
2 6
7 15
5 15
12 15
13 14
5 14
13 14
2 11
3 11
2 5
9 11
3 15
5 14
1 13
3 7
7 12
4 8

样例输出 2

2
2
3
2
2
3
1
1
3
1
3
2
1
1
3
3
4
1
2
1

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.