1. 程式人生 > 其它 >CF 1061 E

CF 1061 E

​ 還真沒想到能這麼做。

​ 每天都可以買票,第 i 天票價為 \(a_i\) 元,每張票在啟用後都可以用 k 天,k 為給定常數,每天可以買多張票,可以任選每張票的啟用時間。

​ 現在有 q 組詢問,每組形如 l , r 表示只考慮第 l 天到第 r 天,要求每天都至少有一張票處於啟用狀態,求最小代價

​ 不難發現,答案的形式應該為 \(a_l+\min(a_l,a_{l+1},...,a_{l+k-1})+...\) ,而且考慮到 k 是常數,那麼可以將下標按 mod k 同餘分類

​ 現在假設一組內的下標為 \(h_1,h_2...h_m\) ,那麼我想要求出 \(f_i\) = $\sum\limits_{k>=i}\min(h_i,...h_k) $

​ 這個的轉移可以考慮處理出來 \(\text{suf}_i\) 表示 i 後面第一個小於 \(h_i\) 的位置,那麼就有轉移 \(f(i)=(suf_i-i)\times h_i+f(suf_i)\)

​ 現在有了 f 陣列,那麼考慮最終的答案應該如何用這個數組合並出來,用類似的思想,我們直接考慮 [l,r] 內和 l 在同一組的最小的 \(h_k\) ,設在同一組最大的下標為 j,求出這個可以用 ST 表。

​ 那麼最後答案即為 \(f_i-f_k+h_k\times (j-k+1)\)