1. 程式人生 > >onecode第一屆一碼學程正式邀請賽B 排隊找bug

onecode第一屆一碼學程正式邀請賽B 排隊找bug

## 10222 : 排隊找bug ##

時間限制: 1000 MS 記憶體限制: 131072 KB 提交總數: 125 AC總數: 24
問題描述
同學們的bug還真是多啊,orz…
春節期間大家存下的bug都來找肖老師解決了。
每個人都有bug,但是肖老師卻只有一個啊。怎麼辦?
所以肖老師讓大家按先來後到的順序排隊,一個一個的給大家解決。
這不一大早起來,肖老師就等著同學們過來解決bug了。不過肖老師偶爾想知道當前隊伍中bug數量最少的是多少bug。
sos xbug操作表示有一個同學有x個bug,並且過來排隊等待肖老師解決。
ok 操作表示肖老師已經解決了排在隊伍最前面同學的所有bug。
min 操作表示肖老師需要知道當前排隊隊伍中bug數量最少的是多少bug。
輸入格式
第一行輸入一個正整數n,表示總共有n總操作。
接下來輸入n行,每行一種操作。
【限制條件】
1≤n≤10^6
每個人的bug數量不超過1000000。

注意,資料大到用必須得用scanf,printf輸入輸出
輸出格式
對於每一次min操作,輸出當前排隊中bug最少的數量。
如果執行min(或者ok)操作時,當前隊伍為空,則輸出“So happy!no bug!”。
樣例輸入
7
sos 6bug
sos 7bug
min
ok
min
ok
min
樣例輸出
6bug
7bug
So happy!no bug!

#include<bits/stdc++.h>
using namespace std;
queue<int> que;  
deque<int> minque;  
deque
<int>
maxque; void push(int val) { que.push(val); while ((!minque.empty()) && (minque.back() > val)) minque.pop_back(); minque.push_back(val); while ((!maxque.empty()) && (maxque.back() < val)) maxque.pop_back(); maxque.push_back(val); } void
pop() { int value = que.front(); que.pop(); if (!minque.empty() && minque.front() == value) minque.pop_front(); if (!maxque.empty() && maxque.front() == value) maxque.pop_front(); } int findmin() { return minque.front(); } int findmax() { return maxque.front(); } int main() { int n; scanf("%d",&n); while(n--) { char op[10]; scanf("%s",op); int x; if(op[0]=='s') { scanf("%dbug",&x); push(x); } else if(op[0]=='m') { if(que.size()==0 || minque.empty()) printf("So happy!no bug!\n"); else printf("%dbug\n",findmin()); } else { if(que.size()==0 || minque.empty()) printf("So happy!no bug!\n"); else pop(); } } return 0; }