「LTIME107」Odd Split
作者:互联网
「LTIME107」Odd Split
给定 \(N\) 和模数 \(\text{mod}\),对于 \(n=1\sim N\) 计算:
- 有多少个大小为 \(n\) 的排列 \(P\),满足它可以被划分成两个子序列,使得两个子序列的逆序对数均为奇数。
\(1\le N\le 10^6,10^8\le \text{mod}\le 10^9\),保证 \(\text{mod}\) 是奇数。
Solution
我们从反面考虑,计数不存在 Odd Split
的排列。
对于一个排列 \(P\),我们将其划分成尽可能多的块,使得相邻两块间右边元素均大于左边元素(即将 \(\text{premax}(i)<\text{sufmin}(i+1)\) 的位置断开)。
这样做的好处是不同块之间无逆序对的贡献,因此对于每一块分别做,最后可以任意拼接。
对于块 \(A_1,A_2,\cdots,A_k\),考虑构建一张 \(k\) 个点的图,点 \(i\) 和点 \(j\) 之间有连边当且仅当 \(i<j\) 且 \(a_i>a_j\)。
首先这张图一定是形成若干个连续段,其次因为已经保证了“尽可能多的块”,所以这张图连通。
我们对于 \(A\) 的逆序对奇偶性分类讨论:
- 逆序对数为奇数
-
很显然,我们可以构造一个空序列,一个 \(A\) 得到 \((0,1)\);
-
若无法构造出 \((0,0)\),则说明删除任意一个 \(A_i\) 均会导致剩余的序列逆序对数为奇数。
因此,对于 \(\forall i\),\(\text{deg}_i\) 为偶数。我们来证明这是充要条件:
- 对于两个子序列 \(S_1,S_2\),我们可以通过 \(A,\{\}\) 初始状态每次将 \(S_2\) 中的元素从 \(A\) 挪到 \(\{\}\) 得到。每次将一个节点挪到另一个子序列,两个子序列逆序对奇偶性要么均改变,要么均不变。所以不会出现 \((0,0)\)。
-
若无法构造出 \((1,1)\),则说明删除任意一对 \(A_i>A_j\ (i<j)\) 的 \((i,j)\) 均会导致剩余的序列逆序对数为偶数。
因此,\(\text{deg}_i+\text{deg}_j-1\) 为奇数,即 \(\text{deg_i}\) 和 \(\text{deg_j}\) 奇偶性相同。
由于图连通,说明所有点的 \(\text{deg}\) 奇偶性均相同。偶数的情况上面已经讨论过了,下面讨论奇数。
首先因为度数和必为偶数,因此 \(k\) 是偶数。对于两个子序列 \(S_1,S_2\),我们可以通过 \(A,\{\}\) 初始状态每次将 \(S_2\) 中的元素从 \(A\) 挪到 \(\{\}\) 得到。每次将一个节点挪到另一个子序列,恰好有一个子序列的逆序对奇偶性改变。
于是,我们得到:
- 若 \(|S_1|,|S_2|\) 为奇数,则它们奇偶性相同;
- 若 \(|S_1|,|S_2|\) 为偶数,则它们奇偶性不同。
因为构造不出 \((1,1)\),所以充要条件是不存在一个奇数长度的子序列,满足它的逆序对数为奇数。
考虑图上三个点 \(i,j,k\):
- 不能同时存在 \((i,j),(j,k),(i,k)\) 三条边,即不存在奇环,因此图是二分图;
- 不能只有 \((i,j)\) 或只有 \((j,k)\) 或只有 \((i,k)\),因此图是完全二分图。
记 \(A_m\) 是最大值,那么我们得到 \(A_1,\cdots,A_m\) 是左部点,\(A_{m+1},\cdots,A_k\) 是右部点,并且两部分均是有序的,长度均为奇数,且它们刚好形成了一个循环移位。容易验证,它与充要条件相吻合。
- 逆序对数为偶数
-
很显然,我们可以构造一个空序列,一个 \(A\) 得到 \((0,0)\);
-
若无法构造出 \((0,1)\),类似可以得到所有点 \(\text{deg}\) 为偶数;
-
若无法构造出 \((1,1)\),类似可以得到 \(\text{deg}_i\) 和 \(\text{deg}_j\) 奇偶性不同。
因此如果 \(\text{deg}_i\) 和 \(\text{deg}_j\) 同奇偶,它们不能是逆序对。
对于两个子序列 \(S_1,S_2\),我们可以通过 \(A,\{\}\) 初始状态每次将 \(S_2\) 中的元素从 \(A\) 挪到 \(\{\}\) 得到。每次将一个节点挪到另一个子序列,如果这个点 \(\text{deg}\) 是奇数,那么恰好有一个子序列逆序对奇偶性改变;否则,两个子序列逆序对奇偶性要么同时改变要么同时不变。
因此充要条件是不存在一个子序列,满足有偶数个点 \(\text{deg}\) 为奇数,且子序列的逆序对数为奇数。
考虑图上三个点 \(i,j,k\),满足 \(\text{deg}_i\) 为偶数,\(\text{deg}_j,\text{deg}_k\) 为奇数:
-
由于 \(\text{deg}\) 同奇偶的不是逆序对,因此图是二分图;
-
不能只有 \((i,j)\) 或只有 \((i,k)\),因此图是完全二分图。
类似的,\(A_1,\cdots,A_m\) 是左部点,\(A_{m+1},\cdots,A_k\) 是右部点,并且两部分均是有序的,长度恰好一个奇数(事实上, 由于 \(\text{deg}\) 为偶数的这部必须长度是偶数,否则度数和是奇数了,所以至多也只有一个),且它们刚好形成了一个循环移位。同样容易验证它与充要条件相吻合。
-
现在考虑合并块,我们总的来看:
- type 1:大小为 \(1\) 的块只能构造出 \((0,0)\);
- type 2:循环移位块,满足至少有一部长度为奇数,只能构造出 \((0,0)\) 和 \((0,1)\);
- type 3:如果块内所有点 \(\text{deg}\) 均为偶数:
- 若块逆序对数为奇数,只能构造出 \((0,1)\);
- 若块逆序对数为偶数,只能构造出 \((0,0)\) 和 \((1,1)\)。
- type 4:其余情况,所有情况都能构造出。
那么可能的情形也寥寥无几了:
-
只有若干个 type 1
那么显然只有 \(1\) 种可能,排列为 \(1,2,\cdots,n\)。
-
只有一个 type 2,和若干个 type 1
设 \(0\le A<B<C\le n\),其中 \(B-A\) 和 \(C-B\) 中至少一个奇数,则排列为 \([1,A],(B,C],(A,B],(C,n]\)。
-
只有一个 type 3 且块逆序对数为奇数,和若干个 type 1
这说明奇数在奇数位置,偶数在偶数位置,并且原排列逆序对数为奇数。
对于第二种情形,可以简单容斥一下 \(\mathcal O(1)\) 计算。
对于第三种情形,容易发现原排列逆序对数为奇数和偶数的刚好对半平分。这是因为我们可以通过交换 \(P_1,P_3\) 使得逆序对奇偶性改变建立双射。
时间复杂度 \(\mathcal O(n)\)。
标签:奇数,text,奇偶性,偶数,Split,逆序,LTIME107,Odd,deg 来源: https://www.cnblogs.com/wlzhouzhuan/p/16155471.html