84template <
class T,
class T1>
87 std::vector< std::array<int,2> >*map_
111 use_labels = flag_label;
134template <
class T,
class T1>
138 std::vector< std::array<int,2> >*map_
162 use_labels = flag_label;
180template <
class T,
class T1>
207 if (use_labels) {
labels.clear(); }
222template <
class T,
class T1>
252template <
class T,
class T1>
253void MinPQueue<T, T1>::increaseSTACK(
272 keys.resize(heap_size + MAXSTK);
276 labels.resize(heap_size + MAXSTK);
287template <
class T,
class T1>
288void MinPQueue<T, T1>::decreaseSTACK(
307 keys.resize(std::max(n - MAXSTK, MAXSTK));
311 labels.resize(std::max(n - MAXSTK, MAXSTK));
323template <
class T,
class T1 >
324void MinPQueue<T, T1>::heapify(
333 int L, R, idummy, imap;
347 if ((L < heap_size) && (keys[L] < keys[i])) {
353 if ((R < heap_size) && (keys[R] < keys[idummy])) {
360 keys[i] = keys[idummy];
361 keys[idummy] = dummy;
363 T1 dummy2 = labels[i];
364 labels[i] = labels[idummy];
365 labels[idummy] = std::move(dummy2);
369 (*map)[i][0] = (*map)[idummy][0];
370 (*map)[idummy][0] = imap;
371 (*map)[(*map)[i][0]][1] = i;
372 (*map)[(*map)[idummy][0]][1] = idummy;
384template <
class T,
class T1>
402 for (i = (
heap_size - 1)/2; i >= 0; i--) {
419template <
class T,
class T1>
456 (*map)[(*map)[0][0]][1] = 0;
479template <
class T,
class T1>
511 (*map)[(*map)[0][0]][1] = 0;
535template <
class T,
class T1>
584template <
class T,
class T1>
646template <
class T,
class T1>
668 if (key_new >
keys[i]) {
690 while ((i > 0) && (
keys[j] >
keys[i])) {
701 (*map)[i][0] = (*map)[j][0];
703 (*map)[(*map)[i][0]][1] = i;
704 (*map)[(*map)[j][0]][1] = j;
722template <
class T,
class T1>
742 if (key_new >
keys[i]) {
758 while ((i > 0) && (
keys[j] >
keys[i])) {
764 (*map)[i][0] = (*map)[j][0];
766 (*map)[(*map)[i][0]][1] = i;
767 (*map)[(*map)[j][0]][1] = j;
784template <
class T,
class T1>
804 out <<
"min heap:" << std::endl;
805 out <<
"heap size: " <<
heap_size << std::endl;
806 out <<
"data struct. size: " <<
keys.size() << std::endl;
807 out <<
"max stack size: " <<
MAXSTK << std::endl;
810 out <<
"min heap data:" << std::endl;
816 out <<
"[" <<
keys[i];
818 out <<
", '" <<
labels[i] <<
"'";
884template <
class T,
class T1>
887 std::vector< std::array<int,2> >*map_
911 use_labels = flag_label;
934template <
class T,
class T1>
938 std::vector< std::array<int,2> >*map_
962 use_labels = flag_label;
980template <
class T,
class T1>
1023 if (use_labels) {
labels.clear(); }
1038template <
class T,
class T1>
1068template <
class T,
class T1>
1069void MaxPQueue<T, T1>::increaseSTACK(
1088 keys.resize(heap_size + MAXSTK);
1092 labels.resize(heap_size + MAXSTK);
1103template <
class T,
class T1>
1104void MaxPQueue<T, T1>::decreaseSTACK(
1129 int n = keys.size();
1139 keys.resize(std::max(n - MAXSTK, MAXSTK));
1143 labels.resize(std::max(n - MAXSTK, MAXSTK));
1155template <
class T,
class T1 >
1156void MaxPQueue<T, T1>::heapify(
1165 int L, R, idummy, imap;
1181 if ((L < heap_size) && (keys[L] > keys[i])) {
1187 if ((R < heap_size) && (keys[R] > keys[idummy])) {
1194 keys[i] = keys[idummy];
1195 keys[idummy] = dummy;
1198 labels[i] = labels[idummy];
1199 labels[idummy] = dummy2;
1202 imap = (*map)[i][0];
1203 (*map)[i][0] = (*map)[idummy][0];
1204 (*map)[idummy][0] = imap;
1205 (*map)[(*map)[i][0]][1] = i;
1206 (*map)[(*map)[idummy][0]][1] = idummy;
1218template <
class T,
class T1>
1252 for (i = (
heap_size - 1)/2; i >= 0; i--) {
1269template <
class T,
class T1>
1302 imap = (*map)[0][0];
1306 (*map)[(*map)[0][0]][1] = 0;
1329template <
class T,
class T1>
1357 imap = (*map)[0][0];
1361 (*map)[(*map)[0][0]][1] = 0;
1385template <
class T,
class T1>
1434template <
class T,
class T1>
1480template <
class T,
class T1>
1502 if (key_new <
keys[i]) {
1524 while ((i > 0) && (
keys[j] <
keys[i])) {
1534 imap = (*map)[i][0];
1535 (*map)[i][0] = (*map)[j][0];
1536 (*map)[j][0] = imap;
1537 (*map)[(*map)[i][0]][1] = i;
1538 (*map)[(*map)[j][0]][1] = j;
1556template <
class T,
class T1>
1576 if (key_new <
keys[i]) {
1592 while ((i > 0) && (
keys[j] <
keys[i])) {
1597 imap = (*map)[i][0];
1598 (*map)[i][0] = (*map)[j][0];
1599 (*map)[j][0] = imap;
1600 (*map)[(*map)[i][0]][1] = i;
1601 (*map)[(*map)[j][0]][1] = j;
1618template <
class T,
class T1>
1638 out <<
"max heap:" << std::endl;
1639 out <<
"heap size: " <<
heap_size << std::endl;
1640 out <<
"data struct. size: " <<
keys.size() << std::endl;
1641 out <<
"max stack size: " <<
MAXSTK << std::endl;
1644 out <<
"max heap data:" << std::endl;
1650 out <<
"[" <<
keys[i];
1652 out <<
", '" <<
labels[i] <<
"'";
std::vector< std::array< int, 2 > > * map
void display(std::ostream &)
MaxPQueue(bool a=false, std::vector< std::array< int, 2 > > *b=NULL)
void display(std::ostream &)
std::vector< std::array< int, 2 > > * map
MinPQueue(bool a=false, std::vector< std::array< int, 2 > > *b=NULL)
std::array< T, d > pow(std::array< T, d > &x, double p)