# 要素数Nの配列Aで構築されたヒープの要素iをより小さい値に更新
decrease(A, i, value):
    A[i] ← value

#配列Aで構築されたヒープの要素iからダウンヒープ
downHeap(A, i):
    l ← left(i)
    r ← right(i)

    # 親(自分)、左の子、右の子の中で最大のノードを見つける
    if l < N and A[l] > A[i]:
        largest ← l
    else:
        largest ← i
    if r < N and A[r] > A[largest]:
        largest ← r

    if largest ≠ i:             # どちらかの子が最大の場合
        swap(A[i], A[largest])
        downHeap(A, largest)


# 要素を減少させる使用例
A ← ヒープ条件を満たす整数の列
decrease(A, 0, 1)
downHeap(A, 0)