題解:AT_arc116_b [ARC116B] Products of Min-Max

Redamancy_Lydic發表於2024-09-08

在題庫裡面亂翻,就翻到了。

因為在這道題裡面子序列不需要考慮元素順序,所以原序列無論是什麼順序都不會影響答案。

所以先把元素按照從大到小的順序排列,然後考慮每個元素的貢獻。

在當前序列中,對於元素 \(a_i\),不妨設其為最小值,並去尋找它能作為哪些序列的最小值。容易發現它作為最小值的時候只能和 \(1\sim i\) 中的元素產生貢獻。

具體的,對於當前從 \(1\sim i\) 中選擇的 \(a_j\),如果令其為最大值,那麼由 \(a_i\)\(a_j\) 這兩個值作為最值的序列元素一定都在 \(j\sim i\) 之間,學過集合的同學都知道,這樣的序列顯然有 \(2^{i-j-1}\) 個。

這樣我們就可以得到一個 \(\mathcal{O}(n^2)\) 的解法,如下:

\[\sum_{i=1}^{n}(a_i\times(\sum_{j=1}^{i}(a_j\times 2^{i-j-1}))) \]

由於 \(i-j-1\) 中會出現負數,我們稍微變一下式子可以得到:

\[\sum_{i=1}^{n}(a_i\times(\sum_{j=1}^{i-1}(a_j\times 2^{i-j-1})+a_i)) \]

但是這樣顯然還不夠,於是我們可以
\(j\) 的列舉進行最佳化。容易想到預處理。

我們用一箇中間變數 \(sum\) 表示第二個括號裡面的值。每次計算過答案以後,我們讓 \(sum\gets sum\times 2+a_i\) 即可。

記得取模。

提交記錄

相關文章