單調佇列學習筆記

2021-08-10 23:23:14 字數 1198 閱讀 9631

單調佇列學習筆記 —— by menci

(輔助佇列 m 即為單調佇列

luogu p3957 跳房子

noip2017普及組★跳房子

顯然答案有單調性,所以二分答案。

判斷時 dp。 f[

i]表示跳前i個格仔,且停在第 i 個格仔最大分數; sc

ore[

i]表示第 i 個格仔的分數。

易得轉移方程 f[

i]=m

ax(f

[j]|

從j可以

跳到i)

+sco

re[i

] 時間複雜度:θ(

log2

nn2)

考慮優化

為了防止被卡手寫deque

這裡的nextpos即為列舉的格仔j

_ _ _ _ _ _ _ _ _nextposi

(單調佇列維護)

#include 

using namespace std;

const int n = 5e5 + 5;

int n, d, k;

intpos[n], score[n];

inline bool in(int

x, int l, int r)

inline bool check(int limit)

if (ql <= qr && f[*ql] != int_min) // 為了避免下一句 int_min + 乙個負數溢位

f[i] = f[*ql] + score[i];

else f[i] = int_min;

ans = max(ans, f[i]);

}return ans >= k;

}int main()

printf("%d\n", check(pos[n]) ? l : -1);

return

0;}

單調佇列 學習筆記

q 給定乙個長度為n的序列 可能有負數 從中找出一段長度不超過m的連續子串行,使得其和最大 n 500000 n 500000 n 5000 00 a 對於這題 首先不難想到先求出數列字首和sum 那麼顯然問題的答案就是max i mn sum i minj i m i 1 sum j max n ...

單調佇列 學習筆記

單調佇列是一種特殊的雙端佇列,其滿足單調性,即內部元素單調遞增或單調遞減。單調佇列可以用陣列模擬,也可以用 stl 中的 deque 實現。例題 最大子序和 給定乙個長度為 n 的整數序列,從中找出一段長度不超過 m 的連續子串行,使得子串行中所有數的和最大。n,m leq 3 10 5 區間和可以...

單調佇列和單調棧學習筆記

單調棧 單調棧是指乙個棧內部的元素是具有嚴格單調性的一種資料結構,分為單調遞增棧和單調遞減棧。單調棧有兩個性質 1.滿足從棧頂到棧底的元素具有嚴格的單調性 2.滿足棧的後進先出特性越靠近棧底的元素越早進棧 元素進棧過程 對於乙個單調遞增棧來說 若當前進棧的元素為 a 如果a 棧頂元素則直接將a 進棧...