做題時的問題:
兩個單調佇列實現會出現乙個問題:可用範圍因最大最小值佇列(存在隊頭)的更改(出隊,導致不可見)而縮小。如果單純計算佇列中覆蓋的範圍,就會漏掉一些區間。如這組資料:
11050345
2167
89
當執行到數字「2」處時,單調佇列(存下標)變成這樣:
大:4 5
小:5實際上,在2~5範圍內的所有區間均有效。
(以上只是反思本蒟蒻的個人問題,大佬可無視)
---------------分割線---------------
思路:需要兩個標記:當前有效範圍的左端點j(當隊頭元素差》=k時改變)和右端點i(隨迴圈進行)。【為方便計算,我開成左開右閉的(j,i]】
當隊頭元素差》=k時,將j右移一位,並把處於有效範圍外的元素從頭部出隊。操作完後,累加答案。
for(i=1;i<=n;++i)//帶min的與區間最小值有關,max最大值ans+=i-j;//累加答案
}
HDU 5289 Assignment 單調佇列
題意 給t足資料,然後每組乙個n和k,表示n個數,k表示最大同意的能力差,接下來n個數表示n個人的能力,求能力差在k之內的區間有幾個 分析 維護乙個區間的最大值和最小值,使得他們的差小於k,於是採用單調佇列 普通單調佇列做法 include include include includeusing ...
單調棧,單調佇列
大多數借鑑了 單調佇列是什麼呢?可以直接從問題開始來展開。poj 2823 給定乙個數列,從左至右輸出每個長度為m的數列段內的最小數和最大數。數列長度 n 106,m n 我們知道,解法 在暴力列舉的過程中,有乙個地方是重複比較了,就是在找當前的f i 的時候,i的前面其它m 1個數在算f i 1 ...
單調棧 單調佇列
單調棧 單調佇列是在棧和佇列的基礎上加上單調結構的資料結構。如果乙個元素入棧或入隊,他會檢查之前的元素,如果之前的元素不可能是答案的解,那麼就彈出元素,使得當前元素入棧或入隊。leetcode 239 滑動視窗最大值 此題是單調佇列,每次遇到乙個元素,一直從隊尾彈出,直到隊尾元素大於該元素為止。還需...