P15924 [TOPC 2023] Heap Structure

题目描述

最小二叉堆,通常简称为“最小堆”,是计算机科学中一种基于二叉树的特殊数据结构。它是一种具有以下两个主要性质的二叉树: 1. **堆性质**:在最小堆中,对于任意给定节点,该节点的值小于或等于其子节点的值。这意味着堆中的最小值始终位于根节点。换句话说,堆中最小的元素位于顶部。 2. **二叉树结构**:最小堆通常是一棵完全二叉树,这意味着除了最后一层可能不满外,树的所有层都被完全填满,且最后一层的节点从左到右依次填充。这种结构性质使得最小堆可以通过数组高效实现。 最小堆常用于实现优先队列,这是一种维护具有关联优先级的元素集合的数据结构。通过将最小元素保持在根节点,最小堆可以在对数时间内快速获取并移除优先级最高(值最小)的元素。然而,从最小堆中移除任何其他元素可能需要线性时间。 汉克最近学习了最小堆。他想知道在一个有 $n$ 个节点的最小堆中,有多少个节点可以存放第 $k$ 小的元素。请编写一个程序来帮助他。

输入格式

输入包含两个空格分隔的正整数 $n$ 和 $k$。

输出格式

输出在 $n$ 个节点的最小堆中,可以存放第 $k$ 小元素的节点数量。

说明/提示

$1 \le k \le n \le 10^{18}$ 翻译由 DeepSeek V3.2 完成