1. 程式人生 > >堆【STL】

堆【STL】

堆【STL—優先佇列】

洛谷P3378

P.S. stl用法大全

需要用到的標頭檔案

#include<queue>

定義一個堆

priority_queue<型別>name;

P.S. 定義的堆預設為大根堆,要定義小根堆可以

priority_queue<int,vector<型別>,greater<型別> >name;

堆的基本操作

q.push(x);      //插入元素“x”
q.empty();     //返回堆是否為空(返回值為布林型)
q.top()       //返回堆頂元素(不彈出)
q.pop() //彈出堆頂元素(不返回) q.size() //返回堆的大小

模版的程式碼

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<vector>

using namespace std;

priority_queue<int,vector<int>,greater<int> >heap;

int n,k,z,num;

int main()
{
	scanf
("%d",&n); while(n --) { scanf("%d",&k); if(k == 1) { scanf("%d",&num); heap.push(num); } if(k == 2) { num = heap.top(); printf("%d\n",num); } if(k == 3) { heap.pop(); } } return 0; }