onecode第一屆一碼學程正式邀請賽B 排隊找bug
阿新 • • 發佈:2019-01-21
## 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;
}