當我們用單調佇列優化dp的時候,目前所做的題目都是可以提煉成滑動視窗的形式。然後我們需要考慮一些細節。
1,滑動視窗的端點上我們能不能取到。
2,對於單調佇列我們維護的東西是什麼?有些單調佇列是自然呈上公升趨勢的。我們單調佇列一般維護的都是序列值。
3,我們在dp的過程中是需要先更新值還是先滑動後再更新。因為有時候正向和逆向的時候我們需要先進行滑動才能進行狀態轉移。
單調佇列有時候題意不是很明顯的滑動視窗,但是可以通過二分性提煉成滑動視窗的背景。
綠色通道為典型題目的重做。
#include
using
namespace std;
int m,n;
const
int n=
1e5+7;
int w[n]
;int f[n]
,q[n]
;bool
check
(int x)
int ans=
0x3f3f3f3f
;for
(int i=n-x;i<=n;i++
) ans=
min(ans,f[i]);
return ans<=m;
//時間用少了代表空格大了,所以縮小空格
}int
main()
int l=
0,r=n;
while
(lcout<}
單調佇列 優化DP
佇列元素保持單調遞增 減 而保持的方式就是通過插隊,把隊尾破壞了單調性的數全部擠掉,從而使佇列元素保持單調。單調佇列的作用 優化dp。許多單調佇列優化的dp可以使複雜度直接降維,下面就以最簡單的一道題為例 在某兩座城市之間有 n 個烽火台,每個烽火台發出訊號都有一定代價。為了使情報準確地傳遞,在連續...
單調佇列優化dp
形如f i max wi的問題都可以用單調佇列優化。例題 板題 注意乙個地方 求完所有的f後 ans不是f n 而是後面的一段字尾的f 注意字尾的左端點。很顯然是rmq問題 計算字首和sum i 對於固定的右端點 i,我們想讓答案最大等價於max,可以用個單調佇列維護。但是隨便乙個資料結構直接on ...
DP 單調佇列優化
使用單調佇列優化的題目具有這樣的特點,他需要我們維持一段區間內的某個最優值,這個區間是隨著遍歷的順序變化的,但是其變化一定具有這樣的特性,也即維持的區間左右端點一定是單調遞增的,而不能出現回流的現象,否則我們在維持佇列單調性過程中剪枝的資料可能是新的區間中的最大值。維持區間最優值的方法有很多,例如靜...