又是二叉树
时间限制:1秒 内存限制:256M
【题目描述】
如上图所示,由正整数1, 2, 3, ...组成了一棵无限大的二叉树。现在请你完成下面两个任务:
**任务1:** 从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10, 5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1)。对于两个结点x和y,假设他们到根结点的路径分别是 \((x_1, x_2, ... ,1)\) 和 \((y_1, y_2, ... ,1)\)(这里显然有 \(x = x_1,y = y_1\)),那么必然存在两个正整数 \(i\) 和 \(j\),使得从 \(x_i\) 和 \(y_j\) 开始,有 \(x_i = y_j , x_{i + 1} = y_{j + 1}, x_{i + 2} = y_{j + 2},...\) 现在的问题就是,给定 \(x\) 和 \(y\) ,要求 \(x_i\)(也就是 \(y_j\))。
**任务2:** 我们已知上图所示的这个二叉树的最后一个结点是 \(n\)。现在的问题是,结点\(m\)所在的子树中一共包括多少个结点。比如,\(n = 12,m = 3\) 那么上图中的结点13,14,15以及后面的结点都是不存在的,结点 \(m\) 所在子树中包括的结点有3,6,7,12,因此结点 \(m\) 的所在子树中共有 4 个结点。
【输入格式】
第一行,针对任务1 的输入,包括两个正整数 \(x\) 和 \(y\)。
第二行,针对任务2 的输入,包括两个正整数 \(n\) 和 \(m(m<=n)\)。
【输出格式】
第一行,输出任务1 的结果,只有一个正整数\(x_i\)。
第二行,输出任务2 的结果,只有一个正整数,表示节点 \(m\) 所在的子树的节点数量。
【输入输出样例】
Input
10 4
12 3
Output
2
4
【数据限制】
\(x、y、n、m\) 均是不大于 1 000 000 000 的正整数。
【来源】
Mr.he