难度:3
基础只是就是完全二叉树的编号,根节点是1,节点是i,那么左子树的编号是2i,右儿子编号2i+1,然后是这道题模拟会超时,可以先从简单情况开始模拟,然后得出结论,第几个到达这个节点的,奇数向左,偶数向右,第几个到达这个节点的计算也要注意,如果是奇数那么要先加再除以2.
#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define all(x) (x).begin(), (x).end()
using namespace std;
typedef long long ll;
typedef vector<int> vi;
typedef pair<int, int> pa;
int main() {
int t;
cin >> t;
while (t--) {
int d, l;
cin >> d >> l;
int s = 1;
for (int i = 0; i < d - 1; i++) {
if (l % 2) {
s = s * 2;
l = (l + 1) / 2;
} else {
s = s * 2 + 1;
l /= 2;
}
}
cout << s << endl;
}
return 0;
}