如何把五方优化到线性?_杂项
JueFan 一只绝帆

如何把五方优化到线性?

一个长度为 nn 的排列的权值定义为:irsilsi\sum_irs_i-ls_i,其中 ls,rsls,rs 是笛卡尔树(大根堆)上左右儿子。

求出所有长度为 nn 的排列的权值。

n106n\le10^6

考虑 dpdp,先想朴素状态。

fl,r,mf_{l,r,m} 表示排列的 [l,r][l,r] 的极值在 mm 的方案数,gl,r,mg_{l,r,m} 表示这些方案的权值和。

转移:

fl,r,m{(rlml)k1=lm1k2=m+1rfl,m1,k1fm+1,r,k2m(l,r)k=l+1rfl+1,r,km=lk=lr1fl,r1,km=rgl,r,m{(rlml)k1=lm1k2=m+1r(fl,m1,k1gm+1,r,k2+gl,m1,k1fm+1,r,k2+fl,m1,k1fm+1,r,k2(k2k1))m(l,r)k=l+1rgl+1,r,km=lk=lr1gl,r1,km=r\begin{aligned}f_{l,r,m}&\gets \left\{\begin{aligned}&\binom{r-l}{m-l}\sum_{k_1=l}^{m-1}\sum_{k_2=m+1}^{r}f_{l,m-1,k_1}f_{m+1,r,k_2}&&m\in(l,r)\\&\sum_{k=l+1}^rf_{l+1,r,k}&&m=l\\&\sum_{k=l}^{r-1}f_{l,r-1,k}&&m=r\end{aligned}\right.\\g_{l,r,m}&\gets \left\{\begin{aligned}&\binom{r-l}{m-l}\sum_{k_1=l}^{m-1}\sum_{k_2=m+1}^{r}\left(\begin{aligned}&f_{l,m-1,k_1}g_{m+1,r,k_2} \\+&g_{l,m-1,k_1}f_{m+1,r,k_2} \\+&f_{l,m-1,k_1}f_{m+1,r,k_2}(k_2-k_1)\end{aligned}\right)&&m\in(l,r) \\&\sum_{k=l+1}^rg_{l+1,r,k}&&m=l\\&\sum_{k=l}^{r-1}g_{l,r-1,k}&&m=r\end{aligned}\right.\end{aligned}

初始值 fi,i,i=1,gi,i,i=0f_{i,i,i}=1,g_{i,i,i}=0

五方的。

然后你发现这个区间 dpdp 很脑瘫,因为你的答案只与区间长度有关,所以你设 fi,mf_{i,m} 表示长度为 ii,极值在 mm 的方案数。

转移式子抄过来:

fi,m{(i1m1)k1=1m1k2=1imfm1,k1fim,k2m(1,i)k=1i1fi1,km=1 or m=igi,m{(i1m1)k1=1m1k2=1im(fm1,k1gim,k2+gm1,k1fim,k2+fm1,k1fim,k2(k2k1+m))m(1,i)k=1i1gi1,km=1 or m=i\begin{aligned}f_{i,m}&\gets \left\{\begin{aligned}&\binom{i-1}{m-1}\sum_{k_1=1}^{m-1}\sum_{k_2=1}^{i-m}f_{m-1,k_1}f_{i-m,k_2}&&m\in(1,i)\\&\sum_{k=1}^{i-1}f_{i-1,k}&&m=1\text{ or }m=i\end{aligned}\right.\\g_{i,m}&\gets \left\{\begin{aligned}&\binom{i-1}{m-1}\sum_{k_1=1}^{m-1}\sum_{k_2=1}^{i-m}\left(\begin{aligned}&f_{m-1,k_1}g_{i-m,k_2}\\+&g_{m-1,k_1}f_{i-m,k_2}\\+&f_{m-1,k_1}f_{i-m,k_2}(k_2-k_1+m)\end{aligned}\right)&&m\in(1,i)\\&\sum_{k=1}^{i-1}g_{i-1,k}&&m=1\text{ or }m=i\end{aligned}\right.\end{aligned}

然后你发现你记这个 ff 真是太愚蠢了,fi,mf_{i,m} 不就等于 (i1)!(i-1)! 吗!

转移式子:

gi,m{(i1m1)k1=1m1k2=1im((m2)!gim,k2+(im1)!gm1,k1+(m2)!(im1)!(k2k1+m))m(1,i)k=1i1gi1,km=1 or m=ig_{i,m}\gets \left\{\begin{aligned}&\binom{i-1}{m-1}\sum_{k_1=1}^{m-1}\sum_{k_2=1}^{i-m}\left(\begin{aligned}&(m-2)!&g_{i-m,k_2}&\\+&(i-m-1)!&g_{m-1,k_1}&\\+&(m-2)!(i-m-1)!&(k_2-k_1+m)&\end{aligned}\right)&&m\in(1,i)\\&\sum_{k=1}^{i-1}g_{i-1,k}&&m=1\text{ or }m=i\end{aligned}\right.

四方的。

然后你发现有一些式子里只有一个 k1k_1 或者 k2k_2,你拆开来:

gi,m{(i1m1)((im)(im1)!k1=1m1gm1,k1+(m1)(m2)!k2=1imgim,k2+(m2)!(im1)!k1=1m1k2=1im(k2k1+m))m(1,i)k=1i1gi1,km=1 or m=ig_{i,m}\gets \left\{\begin{aligned}&\binom{i-1}{m-1}\left(\begin{aligned}&(i-m)(i-m-1)!\sum_{k_1=1}^{m-1}g_{m-1,k_1}\\+&(m-1)(m-2)!\sum_{k_2=1}^{i-m}g_{i-m,k_2}\\+&(m-2)!(i-m-1)!\sum_{k_1=1}^{m-1}\sum_{k_2=1}^{i-m}(k_2-k_1+m)\end{aligned}\right)&&m\in(1,i)\\&\sum_{k=1}^{i-1}g_{i-1,k}&&m=1\text{ or }m=i\end{aligned}\right.

阶乘可以化简:

gi,m{(i1m1)((im)!k1=1m1gm1,k1+(m1)!k2=1imgim,k2+(m2)!(im1)!k1=1m1k2=1im(k2k1+m))m(1,i)k=1i1gi1,km=1 or m=ig_{i,m}\gets \left\{\begin{aligned}&\binom{i-1}{m-1}\left(\begin{aligned}&(i-m)!\sum_{k_1=1}^{m-1}g_{m-1,k_1}\\+&(m-1)!\sum_{k_2=1}^{i-m}g_{i-m,k_2}\\+&(m-2)!(i-m-1)!\sum_{k_1=1}^{m-1}\sum_{k_2=1}^{i-m}(k_2-k_1+m)\end{aligned}\right)&&m\in(1,i)\\&\sum_{k=1}^{i-1}g_{i-1,k}&&m=1\text{ or }m=i\end{aligned}\right.

这个时候你可能会发现我们上面那个式子同时适用于下面的情况了,但那需要定义 (1)!=0(-1)!=0,而通过我们之后的化简,这一项并不能为 00,所以这里并不能省略。

场上卡在这里好久好久好久好久好久好久,直接导致了我在最后一分钟才调出来且取模炸了喜提 1010 分。

你看最后一项连个 gg 也没有,能不能算出来常数呢?

你考虑先算 k1=1m1k2=1im(k2k1+m)\sum\limits_{k_1=1}^{m-1}\sum\limits_{k_2=1}^{i-m}(k_2-k_1+m)

这个东西你考虑它的实际意义:左边选一个位置,右边选一个位置,下标的差。

那我们用随机与期望来理解这件事,左边随机一个位置的期望位置是 1+(m1)2=m2\frac{1+(m-1)}{2}=\frac m 2,右边随机一个位置的期望位置是 m+1+i2\frac{m+1+i}{2},期望坐标差就是 m2m+1+i2=i+12\frac m 2-\frac{m+1+i}2=\frac{i+1}{2}

然后选择的种类数是 (m1)(im)(m-1)(i-m)(左右各有多少个位置乘起来),所以 k1=1m1k2=1im(k2k1+m)=(m1)(im)(i+1)2\sum\limits_{k_1=1}^{m-1}\sum\limits_{k_2=1}^{i-m}(k_2-k_1+m)=\frac{(m-1)(i-m)(i+1)}{2}

代回原式:

gi,m{(i1m1)((im)!k1=1m1gm1,k1+(m1)!k2=1imgim,k2+(m2)!(im1)!(m1)(im)(i+1)2)m(1,i)k=1i1gi1,km=1 or m=ig_{i,m}\gets \left\{\begin{aligned}& \binom{i-1}{m-1}\left(\begin{aligned}&(i-m)!\sum_{k_1=1}^{m-1}g_{m-1,k_1}\\+&(m-1)!\sum_{k_2=1}^{i-m}g_{i-m,k_2}\\+&(m-2)!(i-m-1)!\frac{(m-1)(i-m)(i+1)}{2}\end{aligned}\right)&&m\in(1,i)\\&\sum_{k=1}^{i-1}g_{i-1,k}&&m=1\text{ or }m=i\end{aligned}\right.

化简:

gi,m{(i1m1)((im)!k1=1m1gm1,k1+(m1)!k2=1imgim,k2+(m1)!(im)!(i+1)2)m(1,i)k=1i1gi1,km=1 or m=ig_{i,m}\gets \left\{\begin{aligned}&\binom{i-1}{m-1}\left(\begin{aligned}&(i-m)!\sum_{k_1=1}^{m-1}g_{m-1,k_1}\\+&(m-1)!\sum_{k_2=1}^{i-m}g_{i-m,k_2}\\+&\frac{(m-1)!(i-m)!(i+1)}{2}\end{aligned}\right)&&m\in(1,i)\\&\sum_{k=1}^{i-1}g_{i-1,k}&&m=1\text{ or }m=i\end{aligned}\right.

这是三方。

然后你看用到 gg 的地方都是 mgi,m\sum\limits_mg_{i,m},考虑直接把第二维扔了,设 hi=m=1igi,mh_i=\sum\limits_{m=1}^ig_{i,m}

hi2hi1+m=2i1(i1m1)((im)!hm1+(m1)!him+(m1)!(im)!(i+1)2)h_i\gets 2h_{i-1}+\sum_{m=2}^{i-1}\binom{i-1}{m-1}\left((i-m)!h_{m-1}+(m-1)!h_{i-m}+\frac{(m-1)!(i-m)!(i+1)}{2}\right)

这是平方。

考虑优化这个平方,看到这么多阶乘先把组合数扬了:

hi2hi1+m=2i1(i1)!(m1)!(im)!((im)!hm1+(m1)!him+(m1)!(im)!(i+1)2)2hi1+(i1)!m=2i1(hm1(m1)!+him(im)!+i+12)\begin{aligned}h_i&\gets 2h_{i-1}+\sum_{m=2}^{i-1}\frac{(i-1)!}{(m-1)!(i-m)!}\left((i-m)!h_{m-1}+(m-1)!h_{i-m}+\frac{(m-1)!(i-m)!(i+1)}{2}\right)\\&\gets2h_{i-1}+(i-1)!\sum_{m=2}^{i-1}\left(\frac{h_{m-1}}{(m-1)!}+\frac{h_{i-m}}{(i-m)!}+\frac{i+1}{2}\right)\end{aligned}

把最后一项与 mm 无关的项提出来:

hi2hi1+(i1)!(i2)(i+1)2+(i1)!m=1i(hm1(m1)!+him(im)!)h_i\gets 2h_{i-1}+(i-1)!\frac{(i-2)(i+1)}{2}+(i-1)!\sum_{m=1}^i\left(\frac{h_{m-1}}{(m-1)!}+\frac{h_{i-m}}{(i-m)!}\right)

px=i=1xhii!p_x=\sum\limits_{i=1}^x\frac{h_i}{i!},则式子变为:

hi2hi1+(i1)!(i2)(i+1)2+2pi1(i1)!2hi1+(i1)!((i2)(i+1)2+2pi1)\begin{aligned}h_i&\gets 2h_{i-1}+(i-1)!\frac{(i-2)(i+1)}{2}+2p_{i-1}(i-1)!\\&\gets 2h_{i-1}+(i-1)!\left(\frac{(i-2)(i+1)}{2}+2p_{i-1}\right)\end{aligned}

线性做法!!!!!!

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
总字数 231.7k 访客数 访问量