uoj#P1003. 【IOI2025】羊驼的坎坷之旅

【IOI2025】羊驼的坎坷之旅

一只羊驼想要穿越安第斯高原。它有一张高原的地图,为 $N \times M$ 个方形单元格组成的网格。地图的行从上到下以 $0$ 到 $N-1$ 编号,列从左到右以 $0$ 到 $M-1$ 编号。地图中第 $i$ 行第 $j$ 列的单元格($0 \leq i < N$,$0 \leq j < M$)记为 $(i, j)$。

这只羊驼研究了高原的气候,发现地图中每行的所有单元格具有相同的温度(temperature),每列的所有单元格具有相同的湿度(humidity)。它给了你两个长度分别为 $N$ 和 $M$ 的整数数组 $T$ 和 $H$。这里,$T[i]$($0 \leq i < N$)表示第 $i$ 行所有单元格的温度,$H[j]$($0 \leq j < M$)表示第 $j$ 列所有单元格的湿度。

羊驼还研究了高原的植被情况,注意到一个单元格 $(i, j)$ 无植被的充要条件是其温度大于湿度,形式化为 $T[i] > H[j]$。

羊驼只能通过合法路径在高原上移动。合法路径定义为满足以下条件的单元格序列: 路径中每对连续单元格之间共享一条边。 路径中所有单元格均为无植被的单元格。

你的任务是回答 $Q$ 次询问。对于每次询问,你将获得四个整数:$L$,$R$,$S$ 和 $D$。你需要判断是否存在一条合法路径,使得: 路径起点是单元格 $(0, S)$,终点是单元格 $(0, D)$。 路径中的所有单元格位于列 $L$ 到 $R$ 之间。

保证 $(0, S)$ 和 $(0, D)$ 均为无植被的单元格。

实现细节

你需要实现的第一个函数为:

void initialize(std::vector<int> T, std::vector<int> H)
  • $T$:长度为 $N$ 的数组,表示每行的温度。
  • $H$:长度为 $M$ 的数组,表示每列的湿度。
  • 对每个测试用例,该函数恰好被调用一次。该函数在 can_reach 之前调用。

你需要实现的第二个函数为:

bool can_reach(int L, int R, int S, int D)
  • $L, R, S, D$:描述询问的四个整数。
  • 对每个测试用例,该函数会被调用 $Q$ 次。

当且仅当存在一条从单元格 $(0, S)$ 到单元格 $(0, D)$ 的合法路径,使得路径中的所有单元格位于列 $L$ 到 $R$ 之间时,该函数返回 true

输入格式

输入格式:

N M
T[0] T[1] ... T[N-1]
H[0] H[1] ... H[M-1]
Q
L[0] R[0] S[0] D[0]
L[1] R[1] S[1] D[1]
...
L[Q-1] R[Q-1] S[Q-1] D[Q-1]

其中,$L[k], R[k], S[k]$ 和 $D[k]$ ($0 \leq k < Q$) 指定了每次调用 can_reach 的参数。

输出格式

输出格式:

A[0]
A[1]
...
A[Q-1]

其中, 当函数调用 can_reach(L[k], R[k], S[k], D[k]) 的返回值为 true 时, $A[k]$ ($0 \leq k < Q$)为 $1$, 否则为 $0$。

输入输出样例 #1

输入 #1

输出 #1

说明/提示

例子

考虑以下调用。

initialize([2, 1, 3], [0, 1, 2, 0])

这对应于如下地图,其中白色单元格无植被:

对第一次询问,考虑以下调用:

can_reach(0, 3, 1, 3)

这对应如下场景,其中竖直粗线表示列范围 $L = 0$ 到 $R = 3$,黑色圆点表示起点和终点:

在这种情况下,羊驼可以通过以下合法路径从单元格 $(0,1)$ 移动到 $(0,3)$: $$(0,1), (0,0), (1,0), (2,0), (2,1), (2,2), (2,3), (1,3), (0,3)$$ 因此,该调用应返回 true

对第二次询问,考虑以下调用:

can_reach(1, 3, 1, 3)

其对应如下场景:

在这种情况下,不存在从单元格 $(0, 1)$ 到 $(0, 3)$ 的合法路径,使得路径中的所有单元格位于列 $1$ 到 $3$ 之间。因此,该调用应返回 false

约束条件

  • $1 \leq N, M, Q \leq 200\,000$
  • 对每个满足 $0 \leq i < N$ 的 $i$,都有 $0 \leq T[i] \leq 10^9$。
  • 对每个满足 $0 \leq i < M$ 的 $j$,都有 $0 \leq H[j] \leq 10^9$。
  • $0 \leq L \leq R < M$
  • $L \leq S \leq R$
  • $L \leq D \leq R$
  • $(0, S)$ 和 $(0, D)$ 均为无植被的单元格。

子任务

子任务 分数 额外的约束条件
1 $10$ 对每次询问,都有 $L = 0$, $R = M - 1$。$N = 1$。
2 $14$ 对每次询问,都有 $L = 0$, $R = M - 1$。对每个满足 $1 \leq i < N$ 的 $i$,都有$T[i-1] \leq T[i]$。
3 $13$ 对每次询问,都有 $L = 0$, $R = M - 1$。$N = 3$ 和 $T = [2, 1, 3]$。
4 $21$ 对每次询问,都有 $L = 0$, $R = M - 1$。$Q \leq 10$。
5 $25$ 对每次询问,都有 $L = 0$, $R = M - 1$。
6 $17$ 没有额外的约束条件。