description
世博會馬上就要開幕了,福州大學組織了一次志願者選拔活動。
參加志願者選拔的同學們排隊接受面試官們的面試。參加面試的同學們按照先來先面試並且先結束的原則接受面試官們的考查。
面試中每個人的人品是主要考查物件之一。(提高人品的方法有扶老奶奶過街,不闖紅燈等)
作為主面試官的john想知道當前正在接受面試的同學隊伍中人品值最高的是多少。於是他請你幫忙編寫乙個程式來計算。
input
輸入資料第一行為一整數t,表示有t組輸入資料。
每組資料第一行為」start」,表示面試開始
接下來的資料中有三種情況:
輸入含義
1c name rp_value
名字為name的人品值為rp_value的同學加入面試隊伍。(名字長度不大於5,0 <= rp_value <= 1,000,000,000)2g
排在面試隊伍最前面的同學面試結束離開考場。3q
主面試官john想知道當前正在接受面試的隊伍中人品最高的值是多少。
最後一行為」end」,表示所有的面試結束,面試的同學們可以依次離開了。
所有參加面試的同學總人數不超過1,000,000
output
對於每個詢問q,輸出當前正在接受面試的隊伍中人品最高的值,如果當前沒有人正在接受面試則輸出-1。
sample input
2
startc tiny 1000000000
c lina 0qg
qend
start
qc ccq 200
c cxw 100qg
qc wzc 500
qend
sample output
10000000000-1
200100
500
hint
資料較大建議使用scanf,printf 不推薦使用stl
題目大意:略。
分析:很明顯的一道單調佇列,為什麼呢?後來加入隊伍的人(注意是題目的隊伍而不是**中的佇列,後文也要注意區別隊伍和佇列),如果通過查詢把它插到遞減佇列中對應的位置,而不用維護其後面的值。因為在這個新人出隊之前,在它前面來的人(準確的說是rp更低的被拋棄的那些人)是不可能成為q的結果的,也就不用再維護了。
同時我們記錄乙個總出現人數n和已經面試完的人數out,每次q如果out==n,說明沒有人排隊,輸出-1,否則輸出隊首元素,因為此時是rp最高的人。對於g,如果out的人已經波及到隊首元素的pos,即out>pos[queue[l]],那麼說明rp最高者已經不是隊首了,因為他已經out,則隊首向前進發即l++ 。
上**:
#include#include#include#includeusing namespace std;
const int maxn = 1e6 + 10;
int queue[maxn];
int rp[maxn];
char order[8];
int l, r, n;
int main()
else if(order[0] == 'g')
else if(order[0] == 'q')
}} return 0;
}
你們說是繼續艹數論還是轉戰字串呢?
FZU1894 志願者選拔
世博會馬上就要開幕了,福州大學組織了一次志願者選拔活動。參加志願者選拔的同學們排隊接受面試官們的面試。參加面試的同學們按照先來先面試並且先結束的原則接受面試官們的考查。面試中每個人的人品是主要考查物件之一。提高人品的方法有扶老奶奶過街,不闖紅燈等 作為主面試官的john想知道當前正在接受面試的同學隊...
fzu 1894 志願者選拔(單調佇列)
problem 1894 志願者選拔 世博會馬上就要開幕了,福州大學組織了一次志願者選拔活動。參加志願者選拔的同學們排隊接受面試官們的面試。參加面試的同學們按照先來先面試並且先結束的原則接受面試官們的考查。面試中每個人的人品是主要考查物件之一。提高人品的方法有扶老奶奶過街,不闖紅燈等 作為主面試官的...
FZU1894 志願者選拔(佇列) TLE
problem 1894 志願者選拔 世博會馬上就要開幕了,福州大學組織了一次志願者選拔活動。參加志願者選拔的同學們排隊接受面試官們的面試。參加面試的同學們按照先來先面試並且先結束的原則接受面試官們的考查。面試中每個人的人品是主要考查物件之一。提高人品的方法有扶老奶奶過街,不闖紅燈等 作為主面試官的...