感覺挺厲害的。
我們使用 \(f_i\) 表示恰有 \(i\) 維滿足偏序的數對 \((x,y)\) 的個數,\(g_i\) 表示欽定 \(i\) 維滿足偏序對的數對 \((x,y)\) 的個數。
那麼對於三維偏序:
\[g_0=\dbinom{0}{0}f_0+\dbinom{1}{0}f_1+\dbinom{2}{0}f_2+\dbinom{3}{0}f_3=f_0+f_1+f_2+f_3
\]
\[g_1=\dbinom{1}{1}f_1+\dbinom{2}{1}f_2+\dbinom{3}{1}f_3=f_1+2f_2+3f_3
\]
\[g_2=\dbinom{2}{2}f_2+\dbinom{3}{2}f_3=f_2+3f_3
\]
\[g_3=\dbinom{3}{3}f_3=f_3
\]
\(g_0\) 顯然等於 \(\dbinom{n}{2}\),\(g_1\) 只需要求三遍一維偏序就可以得到,\(g_2\) 只需要求三遍二維偏序就可以得到,這樣我們就可以得到一個方程組:
\[\begin{cases}
f_0=f_3\\
f_0+f_1+f_2+f_3=g_0\\
f_1+2f_2+3f_3=g_1\\
f_2+3f_3=g_2
\end{cases}\]
解之即可。\(f_3\) 即為答案。時間複雜度是優秀的 \(\mathcal O(n\log n)\)。
而且你會發現擴充到多維偏序貌似也是可以做的。