void HeapInsert(_Node* p) { if (heap_sz == myHeap.size()) myHeap.push_back(p); else myHeap[heap_sz] = p; heap_sz++; SiftUp(); }
void MaxHeap<T>::SiftUp(unsigned n) { unsigned p = Parent(n); if(n==0 || arr[n]<=arr[p]) return; std::swap(arr[n],arr[p]); SiftUp(p); }
void CTaskHeap::Remake(SCHCMP *pfCompare) { int s_nCurrent = m_nCurrent; m_nCurrent = 0; while (s_nCurrent--) { m_nCurrent++; SiftUp(m_nCurrent-1, pfCompare); } }
void CTaskHeap::Update(int iNode, SCHCMP *pfCompare) { if (iNode < 0 || m_nCurrent <= iNode) { return; } SiftDown(iNode, pfCompare); SiftUp(iNode, pfCompare); }
ccHeapNode *ccHeap::Extract(void) { ccHeapNode *pResult; assert(Size > 0); pResult = pHeap[1]; pHeap[1] = pHeap[Size]; Size--; SiftUp(); return pResult; }
PTASK_RECORD CTaskHeap::Remove(int iNode, SCHCMP *pfCompare) { if (iNode < 0 || m_nCurrent <= iNode) return NULL; PTASK_RECORD pTask = m_pHeap[iNode]; m_nCurrent--; m_pHeap[iNode] = m_pHeap[m_nCurrent]; SiftDown(iNode, pfCompare); SiftUp(iNode, pfCompare); return pTask; }
bool CTaskHeap::Insert(PTASK_RECORD pTask, SCHCMP *pfCompare) { if (m_nCurrent == m_nAllocated) { if (!Grow()) { return false; } } pTask->m_iVisitedMark = m_iVisitedMark-1; m_pHeap[m_nCurrent] = pTask; m_nCurrent++; SiftUp(m_nCurrent-1, pfCompare); return true; }
int main() { int i, j, x, y; n = N; scanf("%d", &i); x = H[i]; y = H[n]; n = n - 1; if(i == n + 1) { for(j = 1; j <= n; ++j) printf("%d ", H[j]); } else { H[i] = y; if(y >= x) SiftUp(H, i); else SiftDown(H, i); for(j = 1; j <= n; ++j) printf("%d ", H[j]); } return 0; }
void ccHeap::ExtractInsert(ccHeapNode *pNode) { pHeap[1] = pNode; SiftUp(); }
void decrease (size_t id, const ValueType &val) { size_t point = id_to_point_[id]; heap_[point] = val; SiftUp(point); }
void insert(const ValueType &value, size_t id) { heap_.push_back(value); point_to_id_.push_back(id); id_to_point_[id] = point_to_id_.size() - 1; SiftUp(heap_.size() - 1); }
void MaxHeap<T>::Add(T value) { arr.push_back(value); SiftUp(arr.size()-1); }