問題(Question):
題目輸入有三種指令
PUSH k //把k加到heap
POP //刪除heap中的最小值
TOP //輸出heap中的最小值
我直接使用
priority_queue<int, vector<int>, greater<int>>
可以AC
但是如過我仍然使用
priority_queue<int>,
也就是max heap
然後在push資料時push -k進去,
pop時再列印出負值,
邏輯上應該也可以達到min-heap的效果,
但是有兩筆測資一直過不了,
就算換成long long也是一樣,
想請問是哪裡有bug,謝謝大家!
這是這題的oj網址
https://acm.cs.nthu.edu.tw/problem/12316/
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
這是有兩筆測資過不了的程式碼
http://codepad.org/VvfpJVDk
#include <iostream>
#include <queue>
#include <string>
using namespace std;
int main(int argc, const char * argv[]) {
priority_queue<long long> q;
string cmd;
long long num;
while (cin >> cmd) {
if (cmd == "PUSH") {
cin >> num;
q.push(-num);
}
else if (cmd == "POP" && !q.empty()) {
q.pop();
}
else if (cmd == "TOP"){
if (q.empty()) {
cout << "Null" << endl;
}
else {
cout << -q.top() << endl;
}
}
}
return 0;
}