單調棧與單調佇列簡單例題

2022-07-13 03:39:13 字數 719 閱讀 4569

poj3250

題意:有n只奶牛排成一列向右看,每頭奶牛只能看到比自己矮的奶牛,即會被高的奶牛擋住後面,問共有多少只奶牛能被看到

思路:考慮每頭奶牛能被前面牛看到的次數,也就是從他左邊開始單調遞減的序列的長度,用單調棧維護即可

**:

#include#includeusing namespace std;

const int maxn = 80005;

stacks;

int main()

printf("%lld\n",sum);

return 0;

}

poj2823(這題好像要用c++交才能過)

題意:給出乙個長度為n的序列和區間長度k,從左向右對每乙個長度為k的區間詢問最大值和最小值。

思路:對於最小值,考慮維護乙個遞增的雙端佇列,每次入隊時將隊尾比當前入隊元素的全部刪除,每次取隊首並且判斷是否在當前區間內即可

**:

#include#include#include#include#includeusing namespace std;

const int maxn = 1e6+5;

dequeq1,q2;

int a[maxn];

int n,k;

void solve1()

}}void solve2()

}}int main()

單調佇列和單調棧例題

1 單調佇列 給出乙個長度為n的序列和區間長度k 從左向右對每乙個長度為k的區間詢問最大值和最小值。思路 對於最小值,考慮維護乙個遞增的雙端佇列,每次入隊時將隊尾比當前入隊元素的全部刪除,每次取隊首並且判斷是否在當前區間內即可 author hairu,wu from ahut include in...

單調佇列與單調棧

單調棧 單調棧,顧名思義,就是維持單調性 遞增或者遞減 的棧結構,如果新入棧的元素破壞了單調性,就彈出原先棧內元素,直到能夠滿足單調性 用途 它可以很方便地求出某個數的左邊或者右邊第乙個比它大或者小的元素,而且總時間複雜度o n 並且單調棧本身並不難實現 維護 每次入棧前先檢驗入棧後是否會破壞棧的單...

單調佇列與單調棧

線段樹等等容易tle,我們需要乙個o n 的演算法來解決這個問題。思路 可以看出,這個視窗是可以用乙個雙向佇列來模擬的,每當後方加入乙個數,都要從佇列尾部開始淘汰掉所有的小於它的數,保證佇列中每乙個數的後面,在視窗範圍內沒有大於等於它的數。當隊首元素不在視窗範圍時,隊首元素出隊。這樣操作後,隊內的元...