对于 EI K 逆序对排列计数的另一种自然求和方法的理解
有一个简单的 \(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}\),于是答案实际上为:
\]
接下来的方法来自 EI,大力膜拜,这里稍稍细致展开。
考虑加入哑元 \(t\),也就是看似没有用的一个元:
\]
有一个重要的观察是:
\]
因此有 \((1 - xt) f(xt) = (1 - x^{n + 1}t) 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]\),可以得到:
[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}\),那么
\]
\(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 逆序对排列计数的另一种自然求和方法的理解的更多相关文章
- [luogu2513 HAOI2009] 逆序对数列 (计数dp)
题目描述 对于一个数列{ai},如果有iaj,那么我们称ai与aj为一对逆序对数.若对于任意一个由1~n自然数组成的数列,可以很容易求出有多少个逆序对数.那么逆序对数为k的这样自然数数列到底有多少个? ...
- 1523. K-inversions(K逆序对)
1523 这题应该说有一些DP的思想吧 dp[i][j]表示以i为结尾第j个数的个数 k单调下降 直接求的话肯定超时 然后用树状数组来进行维护 求k-1次树状数组 #include <iostr ...
- 1523. K-inversions URAL 求k逆序对,,,,DP加树状数组
1523. K-inversions Time limit: 1.0 secondMemory limit: 64 MB Consider a permutation a1, a2, …, an (a ...
- hihoCoder_二分·归并排序之逆序对
一.题目 题目1 : 二分·归并排序之逆序对 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 在上一回.上上回以及上上上回里我们知道Nettle在玩<艦これ&g ...
- 【BZOJ4517】[Sdoi2016]排列计数 组合数+错排
[BZOJ4517][Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值 ...
- BZOJ4517 Sdoi2016 排列计数 【DP+组合计数】*
BZOJ4517 Sdoi2016 排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 ...
- SPOJ:Another Version of Inversion(二维数组的逆序对)
DCE Coders admins are way much geekier than they actually seem! Kartik has been following that tradi ...
- BZOJ 4517: [Sdoi2016]排列计数 错排+逆元
4517: [Sdoi2016]排列计数 Description 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i, ...
- Leetcode 629.K个逆序对数组
K个逆序对数组 给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数. 逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 ...
- 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 ...
随机推荐
- HL7标准的版本
HL7V2 HL7v2是用于在系统之间交换临床和患者信息的最广泛使用的医疗保健消息传递标准.HL7v2的目标是使用代表临床事件信息的标准化消息(例如患者管理活动.人口统计.医疗订单.结果和财务信息)在 ...
- SKG 渠道中台借助 SAE + 大禹打造云原生 DevOPS,提效 60%
简介: 新零售标杆 SKG 全面拥抱 Serverless,敏捷交付! 作者:陈列昂(SKG).昕辰.龙琛.黛忻 项目背景 未来穿戴健康科技股份有限公司(SKG)是一家专注为个人与家庭提供智能可穿戴健 ...
- 模拟IDC spark读写MaxCompute实践
简介: 现有湖仓一体架构是以 MaxCompute 为中心读写 Hadoop 集群数据,有些线下 IDC 场景,客户不愿意对公网暴露集群内部信息,需要从 Hadoop 集群发起访问云上的数据.本文以 ...
- 庖丁解牛-图解MySQL 8.0优化器查询解析篇
简介: SQL优化器本质上是一种高度抽象化的数据接口的实现,经过该设计,客户可以使用更通用且易于理解的SQL语言,对数据进行操作和处理,而不需要关注和抽象自己的数据接口,极大地解放了客户的应用程序. ...
- PostMan测试图片上传接口的方法
一.选择POST后添加接口地址 二.选择Body下的from-data 注:Headers不要加参数 三.填写key,再key后的下拉选择file,然后选择文件 注:key并不是图片名称,而是接口接收 ...
- ASP.NET CORE 发布时不编译Views文件夹
.net core 3.0正式版已经发布,目前整体相对来说已经稳定了,可以进行生产开发. 发布时默认情况下Views是直接编译成DLL文件(XXXXXX.Views.dll),日常开发维护过程中,经常 ...
- 实验8 #第8章 Verilog有限状态机设计-1 #Verilog #Quartus #modelsim
8-1 流水灯控制器 1. 实验要求:采用有限状态机设计彩灯控制器,控制LED灯实现预想的演示花型. 2. 实验内容: (1)功能:设计彩灯控制器,要求控制18个LED灯实现如下的演示花型: 从两边往 ...
- 2023 Stack Overflow 调研
一.Programming, scripting, and markup languages 二.Databases 三.Web frameworks and technologies 四.Other ...
- 羽夏闲谈—— Kdenlive flatpak 版本解决语音识别找不到 pip3
简述 Kdenlive是在 Linux 上一款比较优秀的剪辑软件,功能比较强大.操作相对容易,能够满足日常剪辑的需要. 解决方案 找到对应的安装目录/var/lib/flatpak/app/o ...
- 经验之谈:我为什么选择了这样一个激进的缓存大Key治理方案
一.引言 本文将结合我的一次Redis大Key的治理经验,来浅谈一下缓存大Key的治理方案选择.文中主要包括缓存大Key基础知识.大Key治理方案选择.大Key治理案例等,适合有一定开发经验的开发者阅 ...