要求我求出与某编号的深度相同的有几个,除了最后一行,其他都是满的。然后我们观察完全二叉树其实是有规律的,第n层的最后一个编号是(2的n次方 - 1),比如第二层最后一个是3,然后这题又给你最后的编号a了,只要当2的n次方 - 1大于它时(另外这题其实最后一行一定是不满的),然后就是a-2的(n次方-1)+1

#include<bits/stdc++.h>
using namespace std;
long long a,b,T,c,x,y;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin>>T;
    for(int i=0;i<T;i++){
        cin>>a>>b;
        for(int j=0;j<b;j++){
            cin>>c;
            x=2;
            y=1;
            while(x-1<c)x*=2;
            if(x-1>a)cout<<a-x/2+1<<"\n";
            else cout<<x/2<<"\n";
        }
    }
}