#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 = 0; /*Позиция для вставки*/
int max = 0; /*Максимальный элемент в очереди*/
if(n == 0) /*Если в очереди еще нет элементов*/
pos = 0;
else if(n == 1)
pos = 1;
else
for(int i = 1; i < n; i++)
if(pq[i] > pq[max])
max = i;
if(max != 0) pos = max + 1;
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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgSXRlbXsKcHJpdmF0ZToKCWludCBrZXk7CglpbnQgZGF0YTsKcHVibGljOgoJSXRlbSgpOiBkYXRhKDApLCBrZXkoMCl7fQoJSXRlbShpbnQgZGF0YSwgaW50IGtleSk6IGRhdGEoZGF0YSksIGtleShrZXkpe30KCXZvaWQgcHJpbnQoKXsKCQlzdGQ6OmNvdXQgPDwgImRhdGE6ICIgPDwgZGF0YSA8PCAiLCBrZXkgIiA8PCBrZXkgPDwgc3RkOjplbmRsOwoJfQoJYm9vbCBvcGVyYXRvciA8KGNvbnN0IEl0ZW0gJml0ZW0peyByZXR1cm4ga2V5IDwgaXRlbS5rZXk7IH0KCWJvb2wgb3BlcmF0b3IgPihjb25zdCBJdGVtICZpdGVtKXsgcmV0dXJuIGtleSA+IGl0ZW0ua2V5OyB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBJdGVtPgpjbGFzcyBQUXsKcHJpdmF0ZToKCUl0ZW0gKnBxOwkvKtCc0LDRgdGB0LjQsiDRjdC70LXQvNC10L3RgtC+0LIqLwoJaW50IG47CQkvKtCi0LXQutGD0YnQtdC1INC+0LvQuNGH0LXRgdGC0LLQviDRjdC70LXQvNC10L3RgtC+0LIg0LIg0L7Rh9C10YDQtdC00LgqLwpwdWJsaWM6CglQUShpbnQgbWF4KXsKCQlwcSA9IG5ldyBJdGVtW21heF07CgkJbiA9IDA7Cgl9CgoJaW50IGVtcHR5KCkgY29uc3R7IHJldHVybiBuID09IDA7IH0KCgl2b2lkIGluc2VydChJdGVtIGl0ZW0pewoJCWludCBwb3MgPSAwOwkJLyrQn9C+0LfQuNGG0LjRjyDQtNC70Y8g0LLRgdGC0LDQstC60LgqLwoJCWludCBtYXggPSAwOwkvKtCc0LDQutGB0LjQvNCw0LvRjNC90YvQuSDRjdC70LXQvNC10L3RgiDQsiDQvtGH0LXRgNC10LTQuCovCgoJCWlmKG4gPT0gMCkJLyrQldGB0LvQuCDQsiDQvtGH0LXRgNC10LTQuCDQtdGJ0LUg0L3QtdGCINGN0LvQtdC80LXQvdGC0L7QsiovCgkJCXBvcyA9IDA7CgkJZWxzZSBpZihuID09IDEpCgkJCXBvcyA9IDE7CgkJZWxzZQoJCQlmb3IoaW50IGkgPSAxOyBpIDwgbjsgaSsrKQoJCQkJaWYocHFbaV0gPiBwcVttYXhdKQoJCQkJCW1heCA9IGk7CgoJCWlmKG1heCAhPSAwKSBwb3MgPSBtYXggKyAxOwoJCXBxW3Bvc10gPSBpdGVtOwoJCW4rKzsKCQkvL3BxW24rK10gPSBpdGVtOwoJfQoKCUl0ZW0gZ2V0bWF4KCl7CgkJaW50IG1heCA9IDA7CgoJCWZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspCgkJCWlmKHBxW21heF0gPCBwcVtpXSkKCQkJCW1heCA9IGk7CgkJc3RkOjpzd2FwKHBxW21heF0sIHBxW24tMV0pOwoJCXJldHVybiBwcVstLW5dOwoJfQoKCUl0ZW0gZ2V0bWluKCl7CgkJaW50IG1pbiA9IDA7CgoJCWZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspCgkJCWlmKHBxW21pbl0gPiBwcVtpXSkKCQkJCW1pbiA9IGk7CgkJc3RkOjpzd2FwKHBxW21pbl0sIHBxW24tMV0pOwoJCXJldHVybiBwcVstLW5dOwoJfQoKCXZvaWQgc2hvdygpewoJCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJCXBxW2ldLnByaW50KCk7Cgl9Cn07CgppbnQgbWFpbigpewoJaW50IHA7OwoJUFE8SXRlbT4gcHEoNTApOwoJCglmb3IoaW50IGkgPSAwOyBpIDwgMTA7IGkrKykKCQlwcS5pbnNlcnQoSXRlbSg3LCBpKSk7CgoJcHEuc2hvdygpOwoKCXN0ZDo6Y291dCA8PCAibWF4OiAiOwoJcHEuZ2V0bWF4KCkucHJpbnQoKTsKCXN0ZDo6Y291dCA8PCAibWF4OiAiOwoJcHEuZ2V0bWF4KCkucHJpbnQoKTsKCXN0ZDo6Y291dCA8PCAibWluOiAiOwoJcHEuZ2V0bWluKCkucHJpbnQoKTsKCXN0ZDo6Y291dCA8PCAibWluOiAiOwoJcHEuZ2V0bWluKCkucHJpbnQoKTsKCglzdGQ6OmNpbiA+PiBwOwoJcmV0dXJuIDA7Cn0=
data: 7, key 0
data: 7, key 1
data: 7, key 2
data: 7, key 3
data: 7, key 4
data: 7, key 5
data: 7, key 6
data: 7, key 7
data: 7, key 8
data: 7, key 9
max: data: 7, key 9
max: data: 7, key 8
min: data: 7, key 0
min: data: 7, key 1