P13804 [SWERC 2023] In-order

题目描述

:::align{center} ![](https://espresso.codeforces.com/a6499cce0b5fa60dce8239f242f6db022df44e14.png) ::: 奥运会的开幕式将在河上举行,运动员们将乘船出场。每支队伍的运动员在船上的排列方式被设计成一棵二叉树,每支队伍有 $N$ 名运动员(编号为 $1$ 到 $N$)。 组委会还为每支队伍指定了二叉树的先序遍历、后序遍历,以及中序遍历中的一个(可能为空)连续区间。 现在,为了确保有足够多的树形排列,使得每支队伍都能拥有独特的排列方式,你需要计算不同可能的中序遍历的数量 $T$,并对质数 $999\,999\,937$ 取模。

输入格式

输入包含四行。第一行包含一个整数 $N$。接下来的三行每行包含 $N$ 个用空格分隔的整数。第二行为 $A_1, A_2, \dots, A_N$,其中 $A_k$ 表示先序遍历中第 $k$ 个运动员的编号。第三行为 $B_1, B_2, \dots, B_N$,其中 $B_k$ 表示后序遍历中第 $k$ 个运动员的编号。第四行为 $C_1, C_2, \dots, C_N$,其中 $C_k$ 要么是中序遍历中第 $k$ 个运动员的编号,要么为 $0$,表示组委会未指定第 $k$ 个运动员。 **数据范围** - $1 \leq N \leq 500\,000$; - 至少存在一棵二叉树,其先序、后序和中序遍历分别为所给序列; - 对于所有 $C_k \geq 1$ 的 $k$,这些 $k$ 构成集合 $\{1, 2, \dots, N\}$ 的一个(可能为空)连续子区间。换句话说,若 $k \leq l$ 且 $C_k, C_l$ 都大于 $0$,则 $C_k, C_{k+1}, \dots, C_l$ 都大于 $0$。

输出格式

输出一行,包含一个整数 $S$,满足 $0 \leq S < 999\,999\,937$,且 $T-S$ 能被 $999\,999\,937$ 整除。

说明/提示

**样例解释 1** 题目上方给出的两棵二叉树的中序遍历分别为: - $5\ 3\ 6\ 2\ 4\ 8\ 7\ 1$ - $5\ 3\ 6\ 2\ 4\ 7\ 8\ 1$ **样例解释 2** 四种可能的中序遍历为: - $3\ 2\ 1$ - $2\ 3\ 1$ - $1\ 3\ 2$ - $1\ 2\ 3$ **样例解释 3** 三种可能的中序遍历为: - $2\ 4\ 3\ 1$ - $1\ 4\ 3\ 2$ - $3\ 4\ 2\ 1$ 由 ChatGPT 4.1 翻译