歷經磨難終於解決了這題,原來用stl可以這麼簡單~
這題的思路:
用stl弄2個優先佇列,big佇列優先彈出最小的,small佇列優先彈出最大的,若要求第i小的數字,只要滿足small佇列裡有i個元素,且small佇列的top比big佇列的top小,則small的top就是第i小的數字。
關於優先佇列記住下面這些東西:
模板原型:
priority_queue
t:存放容器的元素型別
sequence:實現優先順序佇列的底層容器,預設是vector
compare:用於實現優先順序的比較函式,預設是functional中的less,即預設是彈出最大的元素
若要建立彈出最小元素的優先佇列,形式是priority_queue,greater>big;
比較函式當然可以自己去定義。
常用的操作如下:
empty() 如果優先隊列為空,則返回真
pop() 刪除第乙個元素
push() 加入乙個元素
size() 返回優先佇列中擁有的元素的個數
top() 返回優先佇列中有最高優先順序的元素
#include#include#include#include#include #include#define m 30005
using namespace std;
int a[m],u[m];
int main()
printf("%d\n",small.top());
} return 0;
}
POJ 1442 Black Box 優先佇列
優先佇列。剛開始用蠢辦法,經過乙個vector容器中轉,這麼一來一回這麼多趟,肯定超時啊。超時 如下 include include include include include include include include include include include using names...
POJ 1442 Black Box 優先佇列
poj 1442 可以當做是優先佇列的模板 poj 1442 題意 給定m個數,每次可以插入序列乙個數 再給n個數,表示在插入第幾個數時輸出乙個數,第一次輸出序列中最小的,第二次輸出序列中第二小的 以此類推,直到輸出n個數。優先佇列的使用 本題思路是建立乙個小頂堆 和乙個大頂堆 儲存前 個小的數,且...
poj 2970 優先佇列
先按di排序,從小到大 然後依次完成合同,若發現第i個合同無法在截止日期前完成,便從之前已經完成的任務中選乙個aj最大的合同,付錢來使得這個合同盡快完成。include include include include include using namespace std struct node i...