P14617 [2019 KAIST RUN Fall] Hilbert' s Hotel

题目描述

希尔伯特旅馆拥有无限多个房间,编号为 0, 1, 2, ... 每个房间最多住一位客人。由于人们倾向于团体入住,旅馆有一个团体计数器变量 $G$。 希尔伯特旅馆今天盛大开业。不久之后,无限多人同时到达,住满了旅馆的每个房间。所有客人都获得了团体编号 0,并且 $G$ 被设置为 1。 讽刺的是,即使每个房间都已住满,旅馆仍然可以接受更多客人: - 如果有 $k$($k \geq 1$)个人到达旅馆,那么对于每个房间号 $x$,房间 $x$ 的客人移动到房间 $x+k$。之后,新客人填满从 0 到 $k-1$ 的所有房间。 - 如果有无限多个人到达旅馆,那么对于每个房间号 $x$,房间 $x$ 的客人移动到房间 $2x$。之后,新客人填满所有奇数编号的房间。 :::align{center} ![](https://cdn.luogu.com.cn/upload/image_hosting/6rjmwf4t.png) ::: 你需要编写一个程序来处理以下查询: - $\tt{1\ k}$ - 如果 $k \geq 1$,那么 $k$ 个人到达旅馆。如果 $k = 0$,那么无限多个人到达旅馆。将团体编号 $G$ 分配给新客人,然后将 $G$ 增加 1。 - $\tt{2\ g\ x}$ - 找到包含团体编号为 $g$ 的客人的第 $x$ 小的房间号。输出其对 $10^9 + 7$ 取模的结果,然后换行。 - $\tt{3\ x}$ - 输出房间 $x$ 中客人的团体编号,然后换行。

输入格式

第一行给出一个整数 $Q$($1 \leq Q \leq 300,000$),表示查询的数量。接下来的每行包含一个查询。查询中的所有数字都是整数。 - 对于 $\tt{1\ k}$ 查询,$0 \leq k \leq 10^9$。 - 对于 $\tt{2\ g\ x}$ 查询,$g < G$,$1 \leq x \leq 10^9$,并且至少有 $x$ 个客人的团体编号为 $g$。 - 对于 $\tt{3\ x}$ 查询,$0 \leq x \leq 10^9$。

输出格式

处理所有查询并按需输出。保证输出不为空。

说明/提示

如果你了解“基数”的概念,请假设“无限”仅指“可数无限”。如果你不了解,则无需担心。 --- 翻译由 DeepSeek V3 完成