單調棧:
單調棧是指乙個棧內部的元素是具有嚴格單調性的一種資料結構,分為單調遞增棧和單調遞減棧。
單調棧有兩個性質:
1.滿足從棧頂到棧底的元素具有嚴格的單調性
2.滿足棧的後進先出特性越靠近棧底的元素越早進棧
元素進棧過程
對於乙個單調遞增棧來說 若當前進棧的元素為 a 如果a < 棧頂元素則直接將a 進棧 如果 a >= 當前棧頂元素則不斷將棧頂元素出棧知道滿足 a < 棧頂元素
說明:
單調佇列:
單調佇列是指乙個佇列內部的元素具有嚴格單調性的一種資料結構,分為單調遞增佇列和單調遞減佇列。
單調佇列滿足兩個性質
1.單調佇列必須滿足從隊頭到隊尾的嚴格單調性。
2.排在佇列前面的比排在佇列後面的要先進隊。
元素進佇列的過程對於單調遞增佇列,對於乙個元素a 如果 a > 隊尾元素 那麼直接將a扔進佇列 如果 a <= 隊尾元素 則將隊尾元素出佇列 知道滿足 a 大於隊尾元素即可;
說明
單調佇列的模板及注釋(模板只是參考,要根據題會改,會用某個部分)
求最值
例題:poj 2823
題意:求多個區間最值
**:
#include
#include
#include
#include
using
namespace
std;
struct node
v[1010000]; //x表示值,y表示位置 可以理解為下標
int a[1010000],n,m,mx[1010000],mn[1010000];
void getmin()
for(;i<=n;i++)
}void getmax() //最大值同最小值的道理,只不過是維護的是遞減佇列
for(;i<=n;i++)
}int main()
printf("\n");
for(i=1;i<=n-m+1;i++)
printf("\n");
return
0;}
求最值,有多個操作,包括刪隊首(刪去最大值,最大值改變的情況),入隊,查詢;
fzu 1894
世博會馬上就要開幕了,福州大學組織了一次志願者選拔活動。
參加志願者選拔的同學們排隊接受面試官們的面試。參加面試的同學們按照先來先面試並且先結束的原則接受面試官們的考查。
面試中每個人的人品是主要考查物件之一。(提高人品的方法有扶老奶奶過街,不闖紅燈等)
作為主面試官的john想知道當前正在接受面試的同學隊伍中人品值最高的是多少。於是他請你幫忙編寫乙個程式來計算。
input
輸入資料第一行為一整數t,表示有t組輸入資料。
每組資料第一行為」start」,表示面試開始
接下來的資料中有三種情況:
輸入 含義
1 c name rp_value 名字為name的人品值為rp_value的同學加入面試隊伍。(名字長度不大於5,0 <= rp_value <= 1,000,000,000)
2 g 排在面試隊伍最前面的同學面試結束離開考場。
3 q 主面試官john想知道當前正在接受面試的隊伍中人品最高的值是多少。
最後一行為」end」,表示所有的面試結束,面試的同學們可以依次離開了。
所有參加面試的同學總人數不超過1,000,000
output
對於每個詢問q,輸出當前正在接受面試的隊伍中人品最高的值,如果當前沒有人正在接受面試則輸出-1。
sample input
2 start
c tiny 1000000000
c lina 0
q g
q end
start
q c ccq 200
c cxw 100
q g
q c wzc 500
q end
sample output
1000000000
0 -1
200
100
500
hint
資料較大建議使用scanf,printf 不推薦使用stl
注意:結構體裡的i要用,雖然我不明白為什麼,不加樣例也過了,但是wa;
**:
#include
#include
#include
#include
#include
using
namespace
std;
struct node
v[1000005],a[1000005];
char s[100];
char s1[100];
int main()
else
}else
if(s[0]=='g')}}
}
棧和佇列 單調佇列 單調棧
講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...
學習筆記 單調佇列與單調棧
乙個具有單調性的棧。插入乙個元素時,如果直接插入不滿足單調性,就一直彈出,直到插入後滿足單調為止。luogu p1886 loj p10175 meaning of the problem 給你乙個數列 a 多組長度為 k 的區間的最大值與最小值。solution 一道非常經典的單調佇列題。以最大值...
單調棧和單調佇列
最近又在重新刷題,又看到了單調棧和單調佇列的題目,發現當時也就是背一背就過了,沒有領會到精髓,這次看了幾位前輩寫的心得,感覺理解深了一些。傳送門 關鍵 用單調佇列來解決問題,一般都是需要得到當前的某個範圍內的最小值或最大值。就比如滑動視窗中的最大值問題 eg 1,1,2,3,4 5,6,7,7,9 ...