题目大意
我们称两个长度为 \(n\) 的数组所构成的数组对 \((a, b)\) 是合法的当且仅当其能够满足以下构造:
- 构造 \(n\) 个长度为 \(3\) 且对应每一位上都不重复的使用了 \(1 \sim n\) 中的元素的数组 \(s_i\),我们令第 \(i\) 个数组 \(s_i\) 的逆序数组为 \(t_i\)。
- 需要满足 \(s_i \ne t_j, s_i \ne s_j, t_i \ne t_j\)。
- 此时将所有 \(s_i, t_i\) 按照字典序排序(以 \(1\) 为起始下标),满足恰好 \(a_i\) 为 \(s_i\) 在其中的排名,\(b_i\) 为 \(t_i\) 在其中的排名。
现在给你两个长度为 \(n\) 的数组 \(A, B\),固定了 \(a_i = A_i\),且对于 \(B_i \ne -1\) 的 \(i\),\(b_i = B_i\),你需要确定有多少对合法的 \((a, b)\) 满足如上条件,对 \(998244353\) 取模。
数据范围:\(1 \le n \le \color{red}{10^6}\)。
solution
显然这个构造还是太吃操作了,考虑快速解决 \(B_i \ne -1\) 的情况下的答案,也就是如何判定 \((a, b)\) 是合法的。
分析一下排序后的数组,那么开头显然就是形如 \(1, 1, 2, 2, 3, 3, ...\),每两个凑成一对,由于要满足 \(s_i \ne t_i\),所以 \(s_i\) 的开头和 \(t_i\) 的开头肯定不一样,因此 \(2i, 2i - 1\) 这两个数不可能同时存在于 \(a\) 或 \(b\) 中,这是必要条件。
利用第二位的数值来确定合法的充要条件(因为翻转后一样),倘若 \(2i - 1\) 在 \(a\) 中,\(2i\) 在 \(b\) 中,那么 \(2i - 1\) 出现的位置所对应的中间数一定小于 \(2i\) 出现位置所对应的中间数,反之同理。此时我们将大小关系建图,那么合法充要条件就是整张图无环。
但我们显然没有很牛的东西统计满足这个条件的图的数目,将图画出来推理一下会发现 \(a, b\) 都确定时图呈现为若干个对冲的环状物,那么我们将那些还没确定的关系给办掉,图的形态就是一些环状物加上一些链状物了。根据上述生成图的方式,得出此时剩下的边只需要满足图的最终形态便都是合法的,相当于说我要加一些边,使得目前没有环的方案数。
将每条边固定一个方向(固定其中 \(a\) 对应的那个点,看这条边指不指向这个点),那么无环相当于所有环状物的方向不能一致,这里初始需要判断一下。然后将若干条链组成环,使得满足这个条件。