F - Zonal Score Maximization Editorial
by
vwxyz
Editorial for printing
\(N\) が偶数のとき
\(P\) を長さ \(2\) ごとの部分列に分割すると、スコアの総和は \(\sum_{i=1}^{N}{P_i}\) となり、これは考えられるスコアの最大値です。 よって、\(X=\frac{N(N+1)}{2}\) ならばどのような順列 \(P\) であっても \(f(P)=X\) を満たすため、\(Q\) に含まれる \(-1\) の個数を \(c\) とすると答えは \(c!\) です。 そうでなければ答えは \(0\) です。
\(N\) が奇数のとき
分割後に長さ \(4\) 以上の連続部分列があるとき、それをさらに分割することでさらにスコアを増やすことができるので、各連続部分列の長さは \(3\) 以下としてよいです。
長さ \(3\) 以上のもののうち最も左にあるものよりも右にある要素は偶数個であり、これらはすべてスコアに含めることができるので、
\(f(P)=\frac{N(N+1)}{2}-\min((P_i,P_{i+1},P_{i+2})\text{の中央値}\mid i=1,3,\dots,N-2)\)
がわかります。
\(p=\frac{N(N+1)}{2}-X\) とおきます。
\(\min((P_i,P_{i+1},P_{i+2})\text{の中央値}\mid i=1,3,\dots,N-2)\)(\(M\) と表すことにする)が \(p\) 以上になるような \(P\) の総数から \(p+1\) 以上になるような \(P\) の総数を引くことで答えを求めることができます。
\(M\) が \(p\) 以上になるような \(P\) の総数の求め方を解説します(\(p+1\) の場合も同様です)。
\(B_i=\begin{cases} 0 \;(P_i < p)\\1 \; (p \leq P_i)\end{cases}\)
とすると、\(M\) が \(p\) 以上になる条件は、\(i=1,2,\dots,\frac{N-1}{2}\) について、\(B_{2i-1}+B_{2i}+B_{2i+1} \geq 2\) となることです。
\(Q_i=-1\) となるような \(i\) については \(B_i\) の値は定まっておらず、そうでなければ定まっています。また、\(B\) 全体には \(0\) がちょうど \(p-1\) 個含まれている必要があります。
\(B_l=a,\; B_r=b\) となるように \(B\) の \(l\) 番目から \(r\) 番目を定めるすべての方法について \(x^{\sum_{i=l+1}^{r}{B_i}}\) を足し合わせた形式的べき級数を \(g_{l,r,a,b}\) と表します。
\(i_1,i_2,i_3\) が奇数のとき、以下が成り立ちます。
\(\begin{pmatrix}
g_{{i_1},{i_3},0,0} & g_{{i_1},{i_3},0,1}\\
g_{{i_1},{i_3},1,0} & g_{{i_1},{i_3},1,1}
\end{pmatrix}=
\begin{pmatrix}
g_{{i_1},{i_2},0,0} & g_{{i_1},{i_2},0,1}\\
g_{{i_1},{i_2},1,0} & g_{{i_1},{i_2},1,1}
\end{pmatrix}
\begin{pmatrix}
g_{{i_2},{i_3},0,0} & g_{{i_2},{i_3},0,1}\\
g_{{i_2},{i_3},1,0} & g_{{i_2},{i_3},1,1}
\end{pmatrix}
\)
よって、
\(i=1,2,\dots,\frac{N-1}{2}\) について
\(\begin{pmatrix}
g_{{2i-1},{2i+1},0,0} & g_{{2i-1},{2i+1},0,1}\\
g_{{2i-1},{2i+1},1,0} & g_{{2i-1},{2i+1},1,1}
\end{pmatrix}\) をこの順に積を取ったものを求めることができれば、\(0\) がちょうど \(p-1\) 個含まれるような \(B\) の総数を求めることができます。
これは分割統治と畳み込みにより \(O(N(\log N)^2)\) で計算することができます。
\(N\) が偶数の場合と同様に適切な階乗を掛けることで、\(B\) の総数から \(P\) の総数を求めることができます。
posted:
last update:
