1 条题解

  • 0
    @ 2026-8-30 11:00:07

    但愿我学过排序 题解

    思路

    设数组中有 zz 个零。有序数组的前 zz 位都应为零。令 xx 为当前前 zz 位中的一的个数,则后半部分恰有 xx 个零。只有选中“前半部分的一”和“后半部分的零”时,xx 才会减少 11,这样的下标对恰有 x2x^2 个。

    总下标对数为 C=(n2)C=\binom n2。从状态 xx 等到一次有效交换的期望操作数为 C/x2C/x^2,所以

    Ex=Ex−1+Cx2,E0=0.E_x=E_{x-1}+\frac{C}{x^2},\qquad E_0=0.

    三个层级为:小规模枚举全部二进制状态并解马尔可夫线性方程;中等规模使用上述一维递推并逐项快速幂求逆;满规模线性预处理所有逆元平方的前缀和。

    做法

    预处理 inv[i]=i−1(mod998244353)inv[i]=i^{-1}\pmod{998244353},再令

    S[x]=∑i=1xinv[i]2.S[x]=\sum_{i=1}^{x}inv[i]^2.

    每组统计零的总数 zz 以及前 zz 位中的一的个数 xx,答案就是

    (n2)⋅S[x](mod998244353).\binom n2\cdot S[x]\pmod{998244353}.

    数组已经有序时 x=0x=0,答案自然为零。

    复杂度

    逆元与前缀和预处理为 O(N)O(N),每组扫描数组为 O(n)O(n);总时间 O(N+∑n)O(N+\sum n),空间 O(N)O(N)。

    • 1

    信息

    ID
    1193
    时间
    2000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者