template < class Item>
void d_ary_fixDown2( Item a[ ] , int node, int n) {
int first_child = node* d + 1 - ( d - 1 ) ;
int last_child = node* d + 1 ;
int max_child = first_child; /*Начнем с самого первого*/
while ( node* d + 1 - ( d - 1 ) <= n) {
int j = node* d + 1 - ( d - 1 ) ;
/*Ищем максимального потомка среди всех d потомков узла node*/
for ( int i = first_child; i <= last_child; i++ )
if ( a[ i] > a[ max_child] )
max_child = i;
/*Если потомок max_child больше своего родителя, то меняем их местами*/
if ( a[ max_child] > a[ ( max_child + d - 2 ) / d] )
std:: swap ( a[ max_child] , a[ ( max_child + d - 2 ) / d] ) ;
node = j;
}
}
dGVtcGxhdGUgPGNsYXNzIEl0ZW0+CnZvaWQgZF9hcnlfZml4RG93bjIoSXRlbSBhW10sIGludCBub2RlLCBpbnQgbil7CglpbnQgZmlyc3RfY2hpbGQgPSBub2RlKmQgKyAxIC0gKGQgLSAxKTsKCWludCBsYXN0X2NoaWxkID0gbm9kZSpkICsgMTsKCWludCBtYXhfY2hpbGQgPSBmaXJzdF9jaGlsZDsJLyrQndCw0YfQvdC10Lwg0YEg0YHQsNC80L7Qs9C+INC/0LXRgNCy0L7Qs9C+Ki8KCgl3aGlsZShub2RlKmQgKyAxIC0gKGQgLSAxKSA8PSBuKXsKCQlpbnQgaiA9IG5vZGUqZCArIDEgLSAoZCAtIDEpOwoJCQoJCS8q0JjRidC10Lwg0LzQsNC60YHQuNC80LDQu9GM0L3QvtCz0L4g0L/QvtGC0L7QvNC60LAg0YHRgNC10LTQuCDQstGB0LXRhSBkINC/0L7RgtC+0LzQutC+0LIg0YPQt9C70LAgbm9kZSovCgkJZm9yKGludCBpID0gZmlyc3RfY2hpbGQ7IGkgPD0gbGFzdF9jaGlsZDsgaSsrKQoJCQlpZihhW2ldID4gYVttYXhfY2hpbGRdKQoJCQkJbWF4X2NoaWxkID0gaTsKCQkvKtCV0YHQu9C4INC/0L7RgtC+0LzQvtC6IG1heF9jaGlsZCDQsdC+0LvRjNGI0LUg0YHQstC+0LXQs9C+INGA0L7QtNC40YLQtdC70Y8sINGC0L4g0LzQtdC90Y/QtdC8INC40YUg0LzQtdGB0YLQsNC80LgqLwoJCWlmKGFbbWF4X2NoaWxkXSA+IGFbKG1heF9jaGlsZCArIGQgLSAyKSAvIGRdKQoJCQlzdGQ6OnN3YXAoYVttYXhfY2hpbGRdLCBhWyhtYXhfY2hpbGQgKyBkIC0gMikgLyBkXSk7CgoJCW5vZGUgPSBqOwoJfQp9
compilation info
prog.cpp: In function 'void d_ary_fixDown2(Item*, int, int)':
prog.cpp:3:25: error: 'd' was not declared in this scope
int first_child = node*d + 1 - (d - 1);
^
prog.cpp:16:4: error: 'swap' is not a member of 'std'
std::swap(a[max_child], a[(max_child + d - 2) / d]);
^
stdout