其他分享
首页 > 其他分享> > 「LTIME107」Odd Split

「LTIME107」Odd Split

作者:互联网

「LTIME107」Odd Split

给定 \(N\) 和模数 \(\text{mod}\),对于 \(n=1\sim N\) 计算:

\(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\) 的逆序对奇偶性分类讨论:

  1. 逆序对数为奇数
  1. 逆序对数为偶数

现在考虑合并块,我们总的来看:

那么可能的情形也寥寥无几了:

对于第二种情形,可以简单容斥一下 \(\mathcal O(1)\) 计算。

对于第三种情形,容易发现原排列逆序对数为奇数和偶数的刚好对半平分。这是因为我们可以通过交换 \(P_1,P_3\) 使得逆序对奇偶性改变建立双射。

时间复杂度 \(\mathcal O(n)\)。

标签:奇数,text,奇偶性,偶数,Split,逆序,LTIME107,Odd,deg
来源: https://www.cnblogs.com/wlzhouzhuan/p/16155471.html