單調佇列
一、單調佇列:佇列中元素之間的關係具有單調性,而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作
二、單調佇列的常用操作如下:
①插入:若新元素從隊尾插入後會破壞單調性,則刪除原來的隊尾元素,直到插入後不再破壞單調性為止,再將其插入單調佇列。(一般用倆個指標指位置,front=0指隊首,rear指末尾的指標)
(核心**:
int rear=-1,front=0;//r為末尾的指標,f為隊首的
for(int i=0;i=front&&q[rear]<=a)rear–;//單調遞減序列
q[++rear]=a;
ans+=rear;
)②獲取最優值:訪問首尾元素。
三、整理歸納單調佇列的一般解題步驟:
1、維護區間最值;
2、去除冗雜狀態(在隊尾插入每插入乙個就要從隊尾開始往前去除冗雜狀態) ;
3、保持佇列單調(最大值是單調遞減序列,最小值是單調遞增序列);
4、最優選擇在隊首。
四、插入操作例子
例如一組數(1,3,2,1,5,6),進入單調不減佇列的過程
1入隊,得到佇列(1);
3入隊,得到佇列(1,3);
2入隊,這時,隊尾的的元素3>2,將3從隊尾彈出,新的隊尾元素1<2,不用彈出,將2入隊,得到佇列(1,2);
1入隊,2>1,將2從隊尾彈出,得到佇列(1,1);
5入隊,得到佇列(1,1,5);
6入隊,得到佇列(1,1,5,6);
最終結果1,1,5,6
2018 9 9第十六次筆記
這次筆記學習函式。我們一直都接觸這main函式,乙個函式中只能有乙個函式,就是這個主函式main,也可以自己定義,但是要宣告函式,先看個例子 函式的學習 include 先對自己定義的函式進行函式宣告 int add int a,int b intsub int a,int b int mul in...
2019 3 第十六次CCF CSP認證心得
第一題大致就是求n個整數中位數。是個送分題,但是題目描述如果中位數是分數,則四捨五入後保留小數點後一位。真心沒懂,難道一些整數的中位數不是只會是整數或者x.5兩種情況麼,我應該沒有理解錯中位數和平均數吧。第二題求中綴表示式,題目描述中說所有的乘號用小寫x代替我是後來才知道的。應該只能得30分了。能不...
acm 單調佇列
單調佇列 佇列中元素之間的關係具有單調性,而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作。操作 1 插入 若新元素從隊尾插入後會破壞單調性,則刪除隊尾元素,直到插入後不再破壞單調性為止,再將其插入單調佇列。2 獲取最優 最大 最小 值 訪問首尾元素。原理 在處理時,去掉不和諧的狀態,使...