#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) {
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] ;
}
void show( ) {
for ( int i = 0 ; i < n; i++ )
pq[ i] .print ( ) ;
}
} ;
int main( ) {
int p;
Item item;
PQ< Item> pq( 50 ) ;
for ( int i = 0 ; i < 10 ; i++ )
pq.insert ( Item( 7 , i) ) ;
pq.show ( ) ;
std:: cout << "max:\n " ;
item = pq.getmax ( ) ;
std:: cin >> p;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgSXRlbXsKcHJpdmF0ZToKCWludCBrZXk7CglpbnQgZGF0YTsKcHVibGljOgoJSXRlbSgpOiBkYXRhKDApLCBrZXkoMCl7fQoJSXRlbShpbnQgZGF0YSwgaW50IGtleSk6IGRhdGEoZGF0YSksIGtleShrZXkpe30KCXZvaWQgcHJpbnQoKXsKCQlzdGQ6OmNvdXQgPDwgImRhdGE6ICIgPDwgZGF0YSA8PCAiLCBrZXkgIiA8PCBrZXkgPDwgc3RkOjplbmRsOwoJfQoJYm9vbCBvcGVyYXRvciA8KGNvbnN0IEl0ZW0gJml0ZW0peyByZXR1cm4ga2V5IDwgaXRlbS5rZXk7IH0KCWJvb2wgb3BlcmF0b3IgPihjb25zdCBJdGVtICZpdGVtKXsgcmV0dXJuIGtleSA+IGl0ZW0ua2V5OyB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBJdGVtPgpjbGFzcyBQUXsKcHJpdmF0ZToKCUl0ZW0gKnBxOwoJaW50IG47CnB1YmxpYzoKCVBRKGludCBtYXgpewoJCXBxID0gbmV3IEl0ZW1bbWF4XTsKCQluID0gMDsKCX0KCWludCBlbXB0eSgpIGNvbnN0eyByZXR1cm4gbiA9PSAwOyB9Cgl2b2lkIGluc2VydChJdGVtIGl0ZW0pewoJCXBxW24rK10gPSBpdGVtOwoJfQoJSXRlbSBnZXRtYXgoKXsKCQlpbnQgbWF4ID0gMDsKCgkJZm9yKGludCBpID0gMTsgaSA8IG47IGkrKQoJCQlpZihwcVttYXhdIDwgcHFbaV0pCgkJCQltYXggPSBpOwoJCXN0ZDo6c3dhcChwcVttYXhdLCBwcVtuLTFdKTsKCQlyZXR1cm4gcHFbLS1uXTsKCX0KCXZvaWQgc2hvdygpewoJCWZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspCgkJCXBxW2ldLnByaW50KCk7Cgl9Cn07CgppbnQgbWFpbigpewoJaW50IHA7CglJdGVtIGl0ZW07CglQUTxJdGVtPiBwcSg1MCk7CgkKCWZvcihpbnQgaSA9IDA7IGkgPCAxMDsgaSsrKQoJCXBxLmluc2VydChJdGVtKDcsIGkpKTsKCglwcS5zaG93KCk7CgoJc3RkOjpjb3V0IDw8ICJtYXg6XG4iOwoJaXRlbSA9IHBxLmdldG1heCgpOwoKCXN0ZDo6Y2luID4+IHA7CglyZXR1cm4gMDsKfQ==