A4686 | 考拉兹猜想
来源官方 / 2024
时间限制1s
内存限制128MB
通过 / 提交0/0
题目描述
考拉兹猜想(Collatz conjecture),又称为奇偶归一猜想、$3n+1$ 猜想、冰雹猜想、角谷猜想、哈塞猜想、乌拉姆猜想或叙拉古猜想。
指对于每一个正整数,如果它是奇数,则对它乘 $3$ 再加 $1$;如果它是偶数,则对它除以 $2$,如此循环,最终都能够得到 $1$。
即对于任意正整数 $n$,我们定义
$$ f(n) = \begin{cases} n / 2 &\tt{if\ n \equiv 0 \pmod{2}}\\ 3n + 1 &\tt{if\ n \equiv 1 \pmod{2}} \end{cases} $$
现重复执行该运算,形成一个序列,从任意正整数开始,把每步的结果作为下一步的输入。可记作:
$$ a_i = \begin{cases} n &\tt{i = 0}\\ f(a_{i - 1}) &\tt{i > 0} \end{cases} $$
考拉兹猜想是:所有正整数最终都会到达 $1$,即对于上式,存在 $i$ 使得 $a_i = 1$。
迄今为止,该猜想经过计算验证,所有不超过 $2^{68} \approx 2.95 \times 10^{20}$ 的正整数,经过上述计算都可以得到 $1$。
给定一个长度为 $N$ 的数组 $A_1, A_2, \cdots, A_N$。
你需要执行 $Q$ 个操作,第 $i$ 个操作的类型为 $T_i$:
- $T_i = 1$:给定两个整数 $L_i$ 和 $R_i$,对数组中 $[L_i, R_i]$ 区间内所有大于 $1$ 的元素 $A_i$ 变为 $f(A_i)$。
- $T_i = 2$:给定两个整数 $L_i$ 和 $R_i$,统计数组中区间 $[L_i, R_i]$ 内值为 $1$ 的元素的个数。
$\large{数据范围}$
- $1 \le N,\ Q \le 2 \times 10^5$
- $T_i = 1$ 或 $2$
- $1 \le A_i \le 10^5$
- $1 \le L_i \le R_i \le N$
- 题目保证至少有 $1$ 个操作的类型为 $T_i = 2$。
指对于每一个正整数,如果它是奇数,则对它乘 $3$ 再加 $1$;如果它是偶数,则对它除以 $2$,如此循环,最终都能够得到 $1$。
即对于任意正整数 $n$,我们定义
$$ f(n) = \begin{cases} n / 2 &\tt{if\ n \equiv 0 \pmod{2}}\\ 3n + 1 &\tt{if\ n \equiv 1 \pmod{2}} \end{cases} $$
现重复执行该运算,形成一个序列,从任意正整数开始,把每步的结果作为下一步的输入。可记作:
$$ a_i = \begin{cases} n &\tt{i = 0}\\ f(a_{i - 1}) &\tt{i > 0} \end{cases} $$
考拉兹猜想是:所有正整数最终都会到达 $1$,即对于上式,存在 $i$ 使得 $a_i = 1$。
迄今为止,该猜想经过计算验证,所有不超过 $2^{68} \approx 2.95 \times 10^{20}$ 的正整数,经过上述计算都可以得到 $1$。
给定一个长度为 $N$ 的数组 $A_1, A_2, \cdots, A_N$。
你需要执行 $Q$ 个操作,第 $i$ 个操作的类型为 $T_i$:
- $T_i = 1$:给定两个整数 $L_i$ 和 $R_i$,对数组中 $[L_i, R_i]$ 区间内所有大于 $1$ 的元素 $A_i$ 变为 $f(A_i)$。
- $T_i = 2$:给定两个整数 $L_i$ 和 $R_i$,统计数组中区间 $[L_i, R_i]$ 内值为 $1$ 的元素的个数。
$\large{数据范围}$
- $1 \le N,\ Q \le 2 \times 10^5$
- $T_i = 1$ 或 $2$
- $1 \le A_i \le 10^5$
- $1 \le L_i \le R_i \le N$
- 题目保证至少有 $1$ 个操作的类型为 $T_i = 2$。
输入格式
对于每个测试文件输入格式如下:
$\tt{N\ Q}$
$\tt{A_1\ A_2\ \cdots\ A_N}$
$\tt{T_1\ L_1\ R_1}$
$\tt{T_2\ L_2\ R_2}$
$\tt{\vdots}$
$\tt{T_Q\ L_Q\ R_Q}$
输出格式
对于所有的 $T_i = 2$ 在单独的一行中输出数组中区间 $[L_i, R_i]$ 内值为 $1$ 的元素的个数。
输入输出样例
输入 #1
10 8 1 7 16 3 6 10 8 5 2 4 2 1 10 1 1 10 1 2 8 1 3 9 1 2 8 2 1 5 1 4 10 2 7 10
输出 #1
1 2 4
$\bf{样例\ 1:}$
1. $\tt{[1, 10]}$ 中的元素有 $\tt{[1, 7, 16, 3, 6, 10, 8, 5, 2,4]}$ 共有 $1$ 个 $1$。
2. 对 $\tt{[1, 10]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 22, 8, 10, 3, 5, 4, 16, 1, 2]}$。
3. 对 $\tt{[2, 8]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 11, 4, 5, 10, 16, 2, 8, 1, 2]}$。
4. 对 $\tt{[3, 9]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 11, 2, 16, 5, 8, 1, 4, 1, 2]}$。
5. 对 $\tt{[2, 8]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 34, 1, 8, 16, 4, 1, 2, 1, 2]}$。
6. $\tt{[1, 5]}$ 中的元素有 $\tt{[1, 34, 1, 8, 16]}$ 共有 $2$ 个 $1$。
7. 对 $\tt{[4, 10]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 34, 1, 4, 8, 2, 1, 1, 1, 1]}$。
8. $\tt{[7, 10]}$ 中的元素有 $\tt{[1, 1, 1, 1]}$ 共有 $4$ 个 $1$。
1. $\tt{[1, 10]}$ 中的元素有 $\tt{[1, 7, 16, 3, 6, 10, 8, 5, 2,4]}$ 共有 $1$ 个 $1$。
2. 对 $\tt{[1, 10]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 22, 8, 10, 3, 5, 4, 16, 1, 2]}$。
3. 对 $\tt{[2, 8]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 11, 4, 5, 10, 16, 2, 8, 1, 2]}$。
4. 对 $\tt{[3, 9]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 11, 2, 16, 5, 8, 1, 4, 1, 2]}$。
5. 对 $\tt{[2, 8]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 34, 1, 8, 16, 4, 1, 2, 1, 2]}$。
6. $\tt{[1, 5]}$ 中的元素有 $\tt{[1, 34, 1, 8, 16]}$ 共有 $2$ 个 $1$。
7. 对 $\tt{[4, 10]}$ 中的所有元素执行一次操作,数组变为 $\tt{[1, 34, 1, 4, 8, 2, 1, 1, 1, 1]}$。
8. $\tt{[7, 10]}$ 中的元素有 $\tt{[1, 1, 1, 1]}$ 共有 $4$ 个 $1$。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?