#P14617. [2019 KAIST RUN Fall] Hilbert' s Hotel

[2019 KAIST RUN Fall] Hilbert' s Hotel

Description

希尔伯特旅馆拥有无限多个房间,编号为 0, 1, 2, ... 每个房间最多住一位客人。由于人们倾向于团体入住,旅馆有一个团体计数器变量 GG

希尔伯特旅馆今天盛大开业。不久之后,无限多人同时到达,住满了旅馆的每个房间。所有客人都获得了团体编号 0,并且 GG 被设置为 1。

讽刺的是,即使每个房间都已住满,旅馆仍然可以接受更多客人:

  • 如果有 kkk1k \geq 1)个人到达旅馆,那么对于每个房间号 xx,房间 xx 的客人移动到房间 x+kx+k。之后,新客人填满从 0 到 k1k-1 的所有房间。
  • 如果有无限多个人到达旅馆,那么对于每个房间号 xx,房间 xx 的客人移动到房间 2x2x。之后,新客人填满所有奇数编号的房间。

:::align{center} :::

你需要编写一个程序来处理以下查询:

  • 1 k\tt{1\ k} - 如果 k1k \geq 1,那么 kk 个人到达旅馆。如果 k=0k = 0,那么无限多个人到达旅馆。将团体编号 GG 分配给新客人,然后将 GG 增加 1。
  • 2 g x\tt{2\ g\ x} - 找到包含团体编号为 gg 的客人的第 xx 小的房间号。输出其对 109+710^9 + 7 取模的结果,然后换行。
  • 3 x\tt{3\ x} - 输出房间 xx 中客人的团体编号,然后换行。

Input Format

第一行给出一个整数 QQ1Q300,0001 \leq Q \leq 300,000),表示查询的数量。接下来的每行包含一个查询。查询中的所有数字都是整数。

  • 对于 1 k\tt{1\ k} 查询,0k1090 \leq k \leq 10^9
  • 对于 2 g x\tt{2\ g\ x} 查询,g<Gg < G1x1091 \leq x \leq 10^9,并且至少有 xx 个客人的团体编号为 gg
  • 对于 3 x\tt{3\ x} 查询,0x1090 \leq x \leq 10^9

Output Format

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

10
3 0
1 3
2 1 2
1 0
3 10
2 2 5
1 5
1 0
3 5
2 3 3
0
1
0
9
4
4

Hint

如果你了解“基数”的概念,请假设“无限”仅指“可数无限”。如果你不了解,则无需担心。


翻译由 DeepSeek V3 完成