【動態規劃10】單調隊列總結(坑了

https://wenku.baidu.com/view/ef259400bed5b9f3f90f1c3a.html

先丟一個感覺超好用論文。
在之前我也寫過兩道用單調隊列優化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]相當於不存在了。

http://blog.csdn.net/flanoc/article/details/72860395

不要臉地丟個自己寫的(代碼超醜的)題解。
維護區間最大值和最小值然後瞎搞就行。

二、同時維護多種單調性

其實也沒說的那麼玄乎,大概就是a[][2],在a[][0]相同時,優先考慮a[][1]的大小。
還是不要臉地扔個題解。

http://blog.csdn.net/flanoc/article/details/72870236

論文中的題目
http://blog.csdn.net/Flanoc/article/details/72918520
待續(坑了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章