#ABC349D. [ABC349D] 区间分割(Divide Interval)

[ABC349D] 区间分割(Divide Interval)

题目描述

对于非负整数 l,r (l < r) l,r\ (l\ <\ r) ,令 S(l,r)S(l,r) 表示由 llr1r−1 的整数按顺序排列形成的序列。

此外,当且仅当一个序列可以表示为 S(2ij,2i(j+1)) S(2^{i}j,2^{i}(j+1)) 时,其中 iijj 为非负整数,我们称这个序列为好序列。

给定非负整数 L,R (L< R) L,R\ (L\lt\ R)

将序列 S(L,R) S(L,R) 划分为最少数量的好序列,并输出划分数量和划分方案。

更具体地说,找到最小的正整数 MM,使得存在一个非负整数对序列满 (l1,r1),(l2,r2),,(lM,rM) (l_1,r_1),(l_2,r_2),\ldots,(l_M,r_M) 足以下条件,并输出这样的(l1,r1),(l2,r2),,(lM,rM) (l_1,r_1),(l_2,r_2),\ldots,(l_M,r_M)

  • L=l1 < r1=l2 < r2==lM < rM=R L=l_1\ <\ r_1=l_2\ <\ r_2=\cdots=l_M\ <\ r_M=R
  • S(l1,r1),S(l2,r2),,S(lM,rM) S(l_1,r_1),S(l_2,r_2),\ldots,S(l_M,r_M) 都是好序列。

可以证明,使 MM 最小化的划分方案是唯一的。

输入格式

输入数据将以以下格式通过标准输入给出。

L L R R

输出格式

请按照以下格式输出。

M M

l1 l_1 r1 r_1

\vdots

lM l_M rM r_M

(l1,r1),,(lM,rM) (l_1,r_1),\dots,(l_M,r_M) 应按升序输出。

输入输出样例 #1

输入 #1

3 19

输出 #1

5
3 4
4 8
8 16
16 18
18 19

输入输出样例 #2

输入 #2

0 1024

输出 #2

1
0 1024

输入输出样例 #3

输入 #3

3940649673945088 11549545024454656

输出 #3

8
3940649673945088 3940649673949184
3940649673949184 4503599627370496
4503599627370496 9007199254740992
9007199254740992 11258999068426240
11258999068426240 11540474045136896
11540474045136896 11549270138159104
11549270138159104 11549545016066048
11549545016066048 11549545024454656

说明/提示

样例说明 1

$ S(3,19)=(3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18) $ 可以被划分为以下五个好序列。

这是最小可能的数量:

S(3,4)=S(20 3,204)=(3) S(3,4)=S(2^0\cdot\ 3,2^0\cdot4)=(3)

S(4,8)=S(22 1,22 2)=(4,5,6,7) 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(21 8,21 9)=(16,17) S(16,18)=S(2^1\cdot\ 8,2^1\cdot\ 9)=(16,17) -

S(18,19)=S(20 18,20 19)=(18) S(18,19)=S(2^0\cdot\ 18,2^0\cdot\ 19)=(18)

数据范围

  • 0 L< R 260 0\leq\ L\lt\ R\leq\ 2^{60}
  • 所有输入值都是整数