QOJ.ac

QOJ

Time Limit: 2.5 s Memory Limit: 256 MB Total points: 100

#667. 随机二叉搜索树

Statistics

将 $N$ 个具有实数值键值的元素插入到一棵 Treap 中。计算 Treap 高度为 $h$ ($h = 0, 1, \dots, N - 1$) 的概率。

Treap 是一种随机二叉搜索树。每个节点都有一个键值(key)和一个优先级(priority)。在本题中,假设这两个值都是 0 到 1 之间的实数。在 Treap 中,始终满足以下两个条件:

  1. 关于键值的条件:

    • 对于每个节点,其键值大于其左子节点及其左子树中所有后代的键值。
    • 对于每个节点,其键值小于其右子节点及其右子树中所有后代的键值。
  2. 关于优先级的条件:

    • 对于每个节点,其优先级大于其子节点的优先级。

下图展示了一个 Treap 的示例。在每个节点中,上半部分包含键值,下半部分包含优先级。

当你插入一个键值为 $x$ 的节点时,执行以下操作:

  1. 均匀随机确定新节点的优先级 $p$,取值范围为 0 到 1。
  2. 首先,像标准二叉搜索树一样,忽略优先级,根据键值插入节点。
  3. 然后,当不满足优先级条件时,执行旋转操作并将新节点向上移动。

在下图中,一个键值为 0.5、优先级为 0.5 的节点被插入到上述 Treap 中。

你均匀随机选择 $N$ 个 0 到 1 之间的键值,并将它们逐一插入到一棵空的 Treap 中。对于每个 $h = 0, 1, \dots, N - 1$,输出最终 Treap 高度为 $h$ 的概率。实数具有足够的精度,且两个随机数相等的概率为零。高度定义为从叶子节点到根节点所经过的边的最大数量。

输入格式

给定一个整数 $N$ ($1 \le N \le 3 \cdot 10^4$)。

输出格式

输出 $N$ 行。第 $i$ 行输出高度为 $i - 1$ 的概率。绝对误差必须不超过 $10^{-5}$。

样例

样例输入 1

1

样例输出 1

1.0

样例输入 2

2

样例输出 2

0.00000
1.00000

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.