#include <iostream>

class Item{
private:
	int key;
	int data;
public:
	Item(): data(0), key(0){}
	Item(int data, int key): data(data), key(key){}
	void print(){
		std::cout << "data: " << data << ", key " << key << std::endl;
	}
	bool operator <(const Item &item){ return key < item.key; }
	bool operator >(const Item &item){ return key > item.key; }
};

template<class Item>
class PQ{
private:
	Item *pq;	/*Массив элементов*/
	int n;		/*Текущее оличество элементов в очереди*/
public:
	PQ(int max){
		pq = new Item[max];
		n = 0;
	}

	int empty() const{ return n == 0; }

	void insert(Item item){
		int pos;	/*Позиция для вставки*/

		if(n == 0)	/*Если в очереди еще нет элементов*/
			pos = 0;
		else
			for(int i = 1; i < n; i++)
				if(pq[pos] < pq[i])
					pos = i;
		pq[++pos] = item;
		n++;
		//pq[n++] = item;
	}

	Item getmax(){
		int max = 0;

		for(int i = 1; i < n; i++)
			if(pq[max] < pq[i])
				max = i;
		std::swap(pq[max], pq[n-1]);
		return pq[--n];
	}

	Item getmin(){
		int min = 0;

		for(int i = 1; i < n; i++)
			if(pq[min] > pq[i])
				min = i;
		std::swap(pq[min], pq[n-1]);
		return pq[--n];
	}

	void show(){
		for(int i = 0; i < n; i++)
			pq[i].print();
	}
};

int main(){
	int p;;
	PQ<Item> pq(50);
	
	for(int i = 0; i < 10; i++)
		pq.insert(Item(7, i));

	pq.show();

	std::cout << "max: ";
	pq.getmax().print();
	std::cout << "max: ";
	pq.getmax().print();
	std::cout << "min: ";
	pq.getmin().print();
	std::cout << "min: ";
	pq.getmin().print();

	std::cin >> p;
	return 0;
}