優先佇列是stl中比較重要的乙個部分,用起來非常方便,在很多排序題中要比sort一遍一遍排序快很多,它能根據自己定義順序來進行排序。
主要的兩種表達形式(其實還有其他的,這裡就先列舉兩個):
第一種是用friend bool operator來寫;
#include#includeusing namespace std;
#includetypedef struct node
}point;
第二種是用bool operator來寫。
#include#includeusing namespace std;
#includetypedef struct node
}point;
要注意的是上面的兩種都是從小到大來排順序!!程式裡面的大於小於號返回的是相反的,大於號是從小到大排序,小於是從大到小排序,自己定義優先順序的時候一定要注意,跟其他地方的不太一樣,記住就好了。
下面來看幾道題
看病要排隊—hdu - 1873
看病要排隊這個是地球人都知道的常識。
不過經過細心的0068的觀察,他發現了醫院裡排隊還是有講究的。0068所去的醫院有三個醫生(汗,這麼少)同時看病。而看病的人病情有輕重,所以不能根據簡單的先來先服務的原則。所以醫院對每種病情規定了10種不同的優先順序。級別為10的優先權最高,級別為1的優先權最低。醫生在看病時,則會在他的隊伍裡面選擇乙個優先權最高的人進行診治。如果遇到兩個優先權一樣的病人的話,則選擇最早來排隊的病人。
現在就請你幫助醫院模擬這個看病過程。
輸入資料報含多組測試,請處理到檔案結束。
每組資料第一行有乙個正整數n(0對於每個"out a"事件,請在一行裡面輸出被診治人的編號id。如果該事件時無病人需要診治,則輸出"empty"。
診治人的編號id的定義為:在一組測試中,"in a b"事件發生第k次時,進來的病人id即為k。從1開始編號。
7
in 1 1
in 1 2
out 1
out 2
in 2 1
out 2
out 1
2in 1 1
out 1
2
empty31
1
我這裡用了三個優先佇列,看起來比較麻煩,可以用乙個優先佇列組來寫,會減少很多篇幅。
#include #include #include #include #include #include const int maxn=25;
using namespace std;
typedef struct node
}point;
int main()
else if(d==2)
else if(d==3)
}else
else if(s1[1]=='x'){
point p;
p=s.top();
s.pop();
cout《很簡單吧,去練幾道題就掌握了。
hdu - 1509
第一次寫部落格,也是剛剛接觸acm,要是有什麼不對的地方請大家指正,謝謝大家了。
優先佇列及過載的使用
優先佇列 顧名思義,首先它是乙個佇列,但是它強調了 優先 二字,所以,已經不能算是一般意義上的佇列了,它的 優先 意指取隊首元素時,有一定的選擇性,即根據元素的屬性選擇某一項值最優的出隊 優先順序佇列是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素 優先佇列是0個或多個元素...
pair int,int 排序 優先佇列過載排序
最接近原點的 k 個點 題目鏈結 我們有乙個由平面上的點組成的列表 points。需要從中找出 k 個距離原點 0,0 最近的點。這裡,平面上兩點之間的距離是歐幾里德距離。你可以按任何順序返回答案。除了點座標的順序之外,答案確保是唯一的。示例 輸入 points 1,3 2,2 k 1 輸出 2,2...
(優先佇列)最小函式值
題目描述 有n個函式,分別為f1,f2,fn。定義fi x aix 2 bix ci x n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個 如有重複的要輸出多個 輸入第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai bi和ci。輸入資料保證ai 1...