对于 EI K 逆序对排列计数的另一种自然求和方法的理解

有一个简单的 O(n3) DP,考虑 fx+1,k=j=0xfx,kj,利用前缀和优化即可。

考虑这实际上是 fx+1(k)=fx(k)1kx+11k,于是答案实际上为:

[xk]f(x)=i=1n1xi1x

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

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

f(t)=i=1n1xit1x

有一个重要的观察是:

f(xt)=i=1n1xi+1t1x=f(t)1xn+1t1xt

因此有 (1xt)f(xt)=(1xn+1t)f(t)

有一个关键的等式:

[tm]f(xt)=xm[tm]f(t)

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

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

我们在 (1xt)f(xt)=(1xn+1t)f(t) 对两边同时取 [tm],可以得到:

[tm]f(xt)[tm]xtf(xt)=[tm]f(t)[tm]xn+1tf(t)xmfmx×xm1fm1=fmxn+1fm1(xm1)fm=(xn+1xm)fm1fm=xm1xnm+11xmfm1

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

考虑 11xm=kxkm,实际上是对于 fm1 做一个间隔为 m 的前缀和。

考虑 1xnm+1 就是 fm(x)fm(x)fm(x(nm+1) 即可。

于是考虑 gm=1xnm+11xmgm1,那么

fm=(1)mxm×(m+1)2gm

g 是好维护的,最终答案为 [xk]fm=[xkm(m+1)2](1)mgm,发现当 m>k 的时候就没有值了,所以只需要维护 O(k) 次卷积,每次是 O(k) 的,非常优秀。

posted @   jeefy  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
历史上的今天:
2023-01-15 算法学习笔记(9): 中国剩余定理(CRT)以及其扩展(EXCRT)
点击右上角即可分享
微信分享提示