AT_abc349_d [ABC349D] Divide Interval
题目描述
对于非负整数 $l,r\ (l < r)$,将从 $l$ 到 $r-1$ 的整数按顺序排列成数列 $(l, l+1, \ldots, r-2, r-1)$,记作 $S(l, r)$。另外,使用非负整数 $i, j$,可以表示成 $S(2^{i}j, 2^{i}(j+1))$ 的数列被称为“好数列”。
给定非负整数 $L, R\ (L < R)$。请将数列 $S(L, R)$ 分割成尽可能少的“好数列”,并输出分割的个数以及分割的方法。更严格地说,求满足以下条件的非负整数对序列 $(l_1, r_1), (l_2, r_2), \ldots, (l_M, r_M)$ 的最小正整数 $M$,并输出这些 $(l_1, r_1), (l_2, r_2), \ldots, (l_M, r_M)$。
- $L = l_1 < r_1 = l_2 < r_2 = \cdots = l_M < r_M = R$
- $S(l_1, r_1), S(l_2, r_2), \ldots, S(l_M, r_M)$ 均为好数列
此外,可以证明,使 $M$ 最小的分割方法是唯一的。
输入格式
输入以以下格式从标准输入读入。
> $L$ $R$
输出格式
请按以下格式输出。
> $M$
> $l_1$ $r_1$
> $l_2$ $r_2$
> $\vdots$
> $l_M$ $r_M$
请注意,$(l_1, r_1), \dots, (l_M, r_M)$ 需要按升序输出。
说明/提示
## 约束条件
- $0 \leq L < R \leq 2^{60}$
- 输入均为整数
## 样例解释 1
$S(3, 19) = (3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)$。可以分割为以下 $5$ 个好数列,这也是使分割个数最小的方法。
- $S(3, 4) = S(2^0 \cdot 3, 2^0 \cdot 4) = (3)$
- $S(4, 8) = S(2^2 \cdot 1, 2^2 \cdot 2) = (4, 5, 6, 7)$
- $S(8, 16) = S(2^3 \cdot 1, 2^3 \cdot 2) = (8, 9, 10, 11, 12, 13, 14, 15)$
- $S(16, 18) = S(2^1 \cdot 8, 2^1 \cdot 9) = (16, 17)$
- $S(18, 19) = S(2^0 \cdot 18, 2^0 \cdot 19) = (18)$
由 ChatGPT 4.1 翻译