大一寒假集訓(9) 優先佇列

2021-10-03 01:15:08 字數 3474 閱讀 2886

定義乙個priority_queue的方法為: priority_queue name;

//type通常為結構體

其中,type可以是任何基本型別或者容器,name為優先隊 列的名字。 和queue不一樣的是,priority_queue沒有front()和back(), 而只能通過top()或pop()訪問隊首元素(也稱堆頂元素),也 就是優先順序最高的元素。

typedef

long

long ll;

struct sa

; ll a[

400005

],b[

400005];

bool

operator

<

(const sa &a,

const sa &b)

priority_queue佇列

大根堆:從大到小排列。 小根堆:從小到大排列。 優先佇列就是堆,也可以自己手寫堆。 //小根堆的寫法 priority_queuevis; //大根堆的寫法 priority_queuevis;

當就是1個型別,可以這樣直接寫; 也可以用結構題。

1.合併果子-優先佇列 nefu 1688

本題是典型的使用優先佇列的題

#include

using

namespace std;

int n;

int x,ans;

int y2;

priority_queue<

int,vector<

int>

,greater<

int>

>q;

intmain()

while

(q.size()

>1)

cout<

return0;

}

2.合成隕石-優先佇列 nefu 355

本題與第一題不同的是多組輸入,記得初始化即可

#include

using

namespace std;

int n;

int x,ans;

priority_queue<

int,vector<

int>

,greater<

int>

>q;

intmain()

ans=0;

//記得初始化

while

(q.size()

>1)

cout<

q.pop();

//初始化

}return0;

}

3.買飯-優先佇列 nefu 1537

本題注意結構體自定義比較的方法

#include

using

namespace std;

int n;

int t;

double ans1,ans2;

struct que

;bool

operator

<

(const que &s1,

const que &s2)

priority_queue

>q;

intmain()

);}while

(!q.

empty()

)printf

("%.2lf\n"

,ans1/

(1.0

*n))

;return0;

}

4.堆-優先佇列 nefu 1692

基本操作,很簡單的題

#include

using

namespace std;

priority_queue<

int,vector<

int>

,greater<

int>

>q;

int n;

//n次操作

intmain()

if(x==2)

cout<

top(

)<

if(x==3)

q.pop();

}return0;

}

5.瑞瑞的木板-優先佇列 nefu 1691

與第一題類似

#include

using

namespace std;

priority_queue<

int,vector<

int>

,greater<

int>

>q;

int n;

//木板數量

int x;

long

long ans1;

intmain()

while

(q.size()

>1)

cout<

return0;

}

6.序列合併-優先佇列 nefu 1689

詳細題解如下

本題我應該一開始就聽題目用scanf ,我用cin就一直tle

#include

using

namespace std;

int n,a[

400005

],b[

400005];

struct lay

;bool

operator

<

(const lay &s1,

const lay &s2)

priority_queue

>q;

intmain()

);for(

int i=

1;i<=n;i++))

;}return0;

}

7.桐桐的新聞系統-優先佇列 nefu 1690

#include

using

namespace std;

char ch[10]

;int id,t,k;

//int r1,r2;

struct lay

;bool

operator

<

(const lay &s1,

const lay &s2)

priority_queue

>q;

intmain()

);} cin>>k;

//執行k次指令

for(

int i=

1; i<=k; i++))

;}return0;

}

大一寒假集訓(8) 佇列

佇列的定義 佇列就是允許在一端進行插入,在另一端進行刪 除的線性表。允許插入的一端稱為隊尾,通常用乙個 隊尾指標r指向隊尾元素,即r總是指向最後被插入的 元素 允許刪除的一端稱為隊首,通常也用乙個隊首 指標f指向排頭元素的前面。初始時f r 0 佇列的基本操作 1 初始化佇列 queue int v...

大一寒假集訓4 動態規劃

個人對dp的理解 記憶化,從小到大,先求出小問題的最優解,然後狀態轉移逐步求出原問題的解。遞推是神,des。使用dp前提 步驟 確定的子問題和求狀態轉移方程的切入點 對於題目中給出的步驟,明示的,比如上下移動的規則,字串的增刪改。暗示的,揹包問題的裝或不裝,裝乙個或裝多個。注意的點 1 空間不夠可以...

2020大一寒假ACM培訓 (優先佇列篇)

優先佇列是一種具有受限訪問操作的儲存結構,元素可以以任意順序進入優先佇列,一旦元素在優先佇列容器中,出隊操作將出佇列中優先順序最高的元素。可以理解為元素進入優先佇列自動排序 構建 priority queue int,vector int greater int s 公升序排列 priority q...