動態規劃10 單調佇列總結 坑了

2021-08-02 07:38:39 字數 852 閱讀 8025

先丟乙個感覺超好用**。

在之前我也寫過兩道用單調佇列優化dp的題解,今天偶然看到了這樣乙個**,大概就題目與用法之間寫乙個總結。

單調佇列就是維護乙個佇列,滿足佇列裡的元素的值與指標都是單調的。

假設這個數列為a,區間的大小為m。

假如維護最大值那麼就維護乙個單調遞減佇列,每次向右找到乙個新的位置i時,假如隊尾的元素比a[i]小的話,就將隊尾元素出隊,直到滿足遞減性便將a[i]入隊。同時對於隊首,假如它的指標小於i-m+1,那麼顯然這個數字對於我們所求的區間是無關的,也將它出隊。

結束之後,此時顯然隊首的元素就是所求區間中的最大值,因為這個佇列是單調遞減的。

對於最小值亦然。

那麼,為什麼這樣子維護佇列,就能找到區間的最大值/最小值呢?

對於最大值,我們思考這麼乙個問題,我們所求的最大值的區間是從i-m+1~i,那我們假設目前的隊尾元素是a[j],而且a[j]

<

<

a[j+1],那麼對於j+1之後區間而言,這些區間必然如果包含j那麼一定包含j+1,然而a[j+1]

>

>

a[j],對於求最大值而言,顯然a[j]相當於不存在了。

不要臉地丟個自己寫的(**超醜的)題解。

維護區間最大值和最小值然後瞎搞就行。

其實也沒說的那麼玄乎,大概就是a[2],在a[0]相同時,優先考慮a[1]的大小。

還是不要臉地扔個題解。

**中的題目

待續(坑了

單調佇列優化動態規劃

lj 那些又遠又差的,我們就不要了 luogup1725 琪露諾 在幻想鄉,琪露諾是以笨蛋聞名的冰之妖精。某一天,琪露諾又在玩速凍青蛙,就是用冰把青蛙瞬間凍起來。但是這只青蛙比以往的要聰明許多,在琪露諾來之前就已經跑到了河的對岸。於是琪露諾決定到河岸去追青蛙。小河可以看作一列格仔依次編號為0到n,琪...

動態規劃之單調佇列優化

先上一道單調佇列動態規劃的模板題 這道題很明顯是一道dp題,可以通過兩個for迴圈就能得到結果,但是n,l,r太大了,兩層for迴圈就超時了,所以我們得用單調佇列來優化。動態規劃一般類如 dp i min dp j f j 0 j i 因為j是從0開始的,使用我們可以用乙個變數記錄dp j f j ...

動態規劃中的單調佇列優化

最近經常出現單調佇列,斜率優化的題目。看到周圍的大神們都會做了,我只能跟上去。要慢慢來,先學單調佇列。類似這樣的轉移方程可以用到單調佇列 f i m ax g j w i 其中,g j 是乙個與i無關係的數。w i 只與i有關係。我們首先開乙個佇列。dp時 1 先刪掉前面超出範圍的隊頭。2 利用隊頭...