I Wanna Beat the Joke
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}这应该是许多同学都见过的一道脑筋急转弯:
\hspace{15pt}如果 1=42=83=12,那么 4 等于什么呢?答案可不是 16 哦,而应该是 1,因为之前有 1=4(嗯,这很河狸)。
\hspace{15pt}小红模仿这个脑筋急转弯,定义了运算符号 \vDash。对于问题 k\vDash\ ?
\hspace{23pt}\bullet\,如果 k 在前 k-1 个式子(即 1\vDash ?2\vDash ?、……、k-1 \vDash ?)的左右两侧中均未出现过,则令 k\vDash 4 \cdot k
\hspace{23pt}\bullet\,否则(说明此前一定有 k/4 \vDash k),则令 k\vDash k/4
\hspace{15pt}你能够帮助小红求出,在前 n 个式子中,一共出现过多少种不同的数吗(左右两侧均计入答案)?

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 2 \times 10^5\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}在一行上输入一个整数 n\left(1\leq n\leq 10^{18}\right),表示小红想知道在前 n 个式子中出现了多少种不同的数。

输出描述:

\hspace{15pt}对于每组测试数据,新起一行输出一个整数,表示对应的答案。
示例1

输入

复制
4
1
2
3
4

输出

复制
2
4
6
6

说明

\hspace{15pt}在这个样例中,前四个式子分别为 1\vDash42\vDash83\vDash124\vDash1