#include <cstdio>
#include <queue>
#include <list>
#include <deque>
#include <stack>

using namespace std;

priority_queue<int> q;
priority_queue<int, vector<int>, greater<int>> q_min, q2 = q_min;

// make_heap, push_heap, pop_heap

int main() {
	q.push(10);
	q.push(20);
	q.push(15);
	printf("%d\n", q.top()); // max
	q_min.push(10);
	q_min.push(20);
	q_min.push(15);
	printf("%d\n", q_min.top()); // max
	q.pop(); // достать top()
	q.size();
	q.empty();
	// decreaseKey
	// erase произвольный элемент
}

typedef pair<int,int> pii;

void dijkstra() {
	static vector<int> d, t;
	int n = 10;
	d.resize(n);
	t.resize(n);
	struct func {
		bool operator() ( pii a, pii b ) {
			return d[a.first] < d[b.first];
		}
	};
	priority_queue<pii, vector<pii>, func> q;
	int v = 0;
	q.push(pii(v, t[v]));
	t[v]++;
	q.push(pii(v, t[v]));
	
	// дейкстра на set-е
	// set<pii> s; 
	// s.insert(pii(d[v], v));
}