單調區間例題

2021-09-29 12:05:12 字數 1530 閱讀 9168

(時間限制:2 秒 記憶體限制:128mb)

【題目描述】 西博會前,某大學組織了一次志願者選拔活動。參加志願者選拔的同學們排隊接受面試 官們的面試,參加面試的同學們按照先來先面試並且先結束的原則接受面試官們的考查。 面試中每個人的英語口語能力是主要考查物件之一。 作為主面試官的 john 想知道當前正在接受面試的同學隊伍中口語能力值最高的是多少。 於是他請你幫忙編寫乙個程式來計算。

【輸入格式】 輸入資料第一行為一整數 t,表示有 t(t≤5)組輸入資料。 每組資料第一行為「start」,表示面試開始。 接下來的資料中有三種情況: 情況 1:c name ky_value 表示姓名為 name 的口語能力值為 ky_value 的同學加入面試隊伍。

其中:名字長度不大於 5,0≤ky_value≤1,000,000,000。 情況 2:g 排在面試隊伍最前面的同學面試結束離開考場。 情況 3:q 主面試官 john 想知道當前正在接受面試的隊伍中口語能力最高的值是多少。 最後一行為」end」,表示所有的面試結束,面試的同學們可以依次離開了。 所有參加面試的同學總人數不超過 1,000,000。 【輸出格式】 對於每個詢問 q ,輸出當前正在接受面試的隊伍中口語能力最高的值,如果當前沒有 人正在接受面試則輸出-1。

【樣例輸入】

2start

c tiny 1000000000

c lina 0qg

qend

start

qc ccq 200

c cxw 100qg

qc wzc 500

qend

【樣例輸出】

10000000000-1

200100

500題目本身就是佇列,由於要找的是最大值,我們自然想到用單調佇列解決問題。 維護乙個單調遞減序列,只需輸出序列中的第乙個元素即可。 對於命令我們可以進行不同的處理:

 如果是 q 命令,則判斷當前佇列中是否仍有元素,如果沒有則輸出-1,如果有則直 接輸出隊首元素即可。

 如果是 g 命令,則對 last 加 1,之後對於佇列中所有超出範圍的前端元素進行出 隊操作(該元素在原序列中的位置》=last)。 乙個重要性質:就是在你新加入元素之 後,不優於這個新元素的元素都沒有存在的必要了。

 如果是 c 命令,則將該元素加入佇列中,並和隊尾元素比較,維護佇列的單調性。

q 中的值是該元素在原序列中的位置。

num[l]:儲存最大值的下標;q 是佇列 。

#include

#define numm ch-'0'

using

namespace std;

int num[

1000005

],q[

1000005];

int zu,i,l,r,tt,x,last;

string name,s;

void

get(

int&res)

intmain()

if(s==

"q")

if(s==

"g")}}

return0;

}

單調佇列和單調棧例題

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

單調佇列模板 例題

單調佇列是指 佇列中元素之間的關係具有單調性,而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作。單調佇列顧名思義就是乙個有規律的佇列,這個佇列的規律是 所有在佇列裡的數都必須按遞增 或遞減 的順序列隊。例如 有如下一串數字 1 5 3 4 2 首先第乙個數字1先進佇列,que 之後第二個...

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

poj3250 題意 有n只奶牛排成一列向右看,每頭奶牛只能看到比自己矮的奶牛,即會被高的奶牛擋住後面,問共有多少只奶牛能被看到 思路 考慮每頭奶牛能被前面牛看到的次數,也就是從他左邊開始單調遞減的序列的長度,用單調棧維護即可 include includeusing namespace std c...