有一个简单的 \(O(n^3)\) DP,考虑 \(f_{x + 1, k} = \sum_{j = 0}^{x} f_{x, k - j}\),利用前缀和优化即可。

考虑这实际上是 \(f_{x + 1}(k) = f_x(k) * \frac {1 - k^{x + 1}}{1 - k}\),于是答案实际上为:

\[[x^k]f(x) = \prod_{i = 1}^n \frac {1 - x^i}{1 - x}
\]

接下来的方法来自 EI,大力膜拜,这里稍稍细致展开。

考虑加入哑元 \(t\),也就是看似没有用的一个元:

\[f(t) = \prod_{i = 1}^n \frac {1 - x^i t}{1 - x}
\]

有一个重要的观察是:

\[f(xt) = \prod_{i = 1}^n \frac {1 - x^{i + 1} t}{1 - x} = f(t) \frac {1 - x^{n + 1} t}{1 - x t}
\]

因此有 \((1 - xt) f(xt) = (1 - x^{n + 1}t) f(t)\)。

有一个关键的等式:

\[[t^m] f(xt) = x^m [t^m] f(t)
\]

考虑 \([t^m] f(t)\) 是由某 \(k\) 个 \(x^i t\) 选来,现在每一个 \(t\) 都多来了一个 \(x\),那么自然就多了 \(m\) 个 \(x\),于是得到了上式。

考虑设 \(f_m = [t^m] f(x)\),也就是此时将 \(f\) 看作一个关于 \(t\) 的多项式,而系数 \(f_m\) 实际上一个关于 \(x\) 的多项式。

我们在 \((1 - xt) f(xt) = (1 - x^{n + 1}t) f(t)\) 对两边同时取 \([t^m]\),可以得到:

\[\begin{aligned} \\
[t^m] f(xt) - [t^m] xt f(xt) &= [t^m] f(t) - [t^m] x^{n + 1} t f(t) \\
x^m f_m - x \times x^{m - 1} f_{m- 1} &= f_m - x^{n + 1} f_{m - 1} \\
(x^m - 1) f_m &= (x^{n + 1} - x^m) f_{m - 1} \\
f_m &= -x^m \frac {1 - x^{n - m + 1}}{1 - x^m} f_{m - 1}
\end{aligned}
\]

现在我们考虑如何维护这个函数。

考虑 \(\frac 1 {1 - x^m} = \sum_k x^{km}\),实际上是对于 \(f_{m - 1}\) 做一个间隔为 \(m\) 的前缀和。

考虑 \(1 - x^{n - m + 1}\) 就是 \(f_m(x) \leftarrow f_m(x) - f_m(x - (n - m + 1)\) 即可。

于是考虑 \(g_m = \frac {1 - x^{n - m + 1}}{1 - x^m} g_{m - 1}\),那么

\[f_m = (-1)^m x^{\frac {m \times (m + 1)} 2} g_m
\]

\(g\) 是好维护的,最终答案为 \(\sum [x^k] f_m = \sum [x^{k - \frac {m(m + 1)}{2}}] (-1)^m g_m\),发现当 \(m \gt \sqrt k\) 的时候就没有值了,所以只需要维护 \(O(\sqrt k)\) 次卷积,每次是 \(O(k)\) 的,非常优秀。

对于 EI K 逆序对排列计数的另一种自然求和方法的理解的更多相关文章

  1. [luogu2513 HAOI2009] 逆序对数列 (计数dp)

    题目描述 对于一个数列{ai},如果有iaj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? ...

  2. 1523. K-inversions(K逆序对)

    1523 这题应该说有一些DP的思想吧 dp[i][j]表示以i为结尾第j个数的个数 k单调下降 直接求的话肯定超时 然后用树状数组来进行维护 求k-1次树状数组 #include <iostr ...

  3. 1523. K-inversions URAL 求k逆序对,,,,DP加树状数组

    1523. K-inversions Time limit: 1.0 secondMemory limit: 64 MB Consider a permutation a1, a2, …, an (a ...

  4. hihoCoder_二分&#183;归并排序之逆序对

    一.题目 题目1 : 二分·归并排序之逆序对 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 在上一回.上上回以及上上上回里我们知道Nettle在玩<艦これ&g ...

  5. 【BZOJ4517】[Sdoi2016]排列计数 组合数+错排

    [BZOJ4517][Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值 ...

  6. BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*

    BZOJ4517 Sdoi2016 排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 ...

  7. SPOJ:Another Version of Inversion(二维数组的逆序对)

    DCE Coders admins are way much geekier than they actually seem! Kartik has been following that tradi ...

  8. BZOJ 4517: [Sdoi2016]排列计数 错排+逆元

    4517: [Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i, ...

  9. Leetcode 629.K个逆序对数组

    K个逆序对数组 给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数. 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且  ...

  10. Codeforces 987 K预处理BFS 3n,7n+1随机结论题/不动点逆序对 X&Y=0连边DFS求连通块数目

    A /*Huyyt*/ #include<bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define pb push_bac ...

随机推荐

  1. 【pytorch学习】之微积分

    4 微积分 在2500年前,古希腊人把一个多边形分成三角形,并把它们的面积相加,才找到计算多边形面积的方法.为了求出曲线形状(比如圆)的面积,古希腊人在这样的形状上刻内接多边形.如图所示,内接多边形的 ...

  2. OpenSergo 流量路由:从场景到标准化的探索

    简介: 本文我们将从流量路由这个场景入手,从常见的微服务治理场景出发.先是根据流量路由的实践设计流量路由的 Spec,同时在 Spring Cloud Alibaba 中实践遵循 OpenSergo ...

  3. 阿里云 EMR Delta Lake 在流利说数据接入中的架构和实践

    简介: 为了消灭数据孤岛,企业往往会把各个组织的数据都接入到数据湖以提供统一的查询或分析.本文将介绍流利说当前数据接入的整个过程,期间遇到的挑战,以及delta在数据接入中产生的价值. 背景 流利说目 ...

  4. 如何用 Serverless 低成本打造个人专属网盘?

    ​简介:想要做个网盘不知如何开始,不妨花3分钟读读这篇,看看如何借助 Serverless ,低成本的做一个"不限制网速.无限扩展.同时支持数百种文件格式在线预览.编辑.协作"的专 ...

  5. 为什么Spring仍然会是云原生时代最佳平台之一?

    简介: 基于Java语言的Spring生态,还能否适应新的开发方式,比如Cloud Native.Serverless.Faas等,它还会是云原生时代的最佳平台的选择吗?本文将从5个角度来为你分析一下 ...

  6. 一篇教程搞定Windows系统中的Docker应用安装

    目录 1. 引言 2. "Docker -> WSL -> Windows"的依赖逻辑 3. 安装方法 3.1 安装WSL 3.2 安装Docker Desktop 4 ...

  7. Golang使用正则

    目录 正则在线测试网站 Golang标准库--regexp 相关文章 课程学习地址: 手册地址: dome 正则在线测试网站 https://regex101.com/ Golang标准库--rege ...

  8. postgresql数据库清理

    大量update或者delete后 磁盘空间会猛增.原理是postgresql并没有真正的删除 只是将删除数据的状态置为已删除,该空间不能记录被从新使用.若是删除的记录位于表的末端,其所占用的空间将会 ...

  9. springboot中quartz定时器的postgresql建表语句

    建表语句如下: DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS; DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS; DRO ...

  10. ctf_web

    ctfshow web13 访问题目链接 一看是一道文件上传题,上传文件进行测试 上传php会显示 error suffix 因此推测会检测格式 当文件字数超出一定字数时,显示 error file ...