gzlinzy
2022-02-18 22:56:18
平时求一个正整数 x%2
,也可以使用 x&1
,而后者其实是取
我们知道,lowbit
函数可取一个数二进制表达式中最低位的1所对应的值。
#define lowbit(y) y&-y
例如,数 lowbit
函数计算出每块蛋糕被分成的块数,并用前缀和记录切到第
由于每次询问的
代码:
#include<bits/stdc++.h>
#define int long long
#define lowbit(y) y&-y
using namespace std;
int n,a[200005],lb[200005],f[200005],t,x,i=1;
signed main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
lb[i]=lowbit(a[i]);
f[i]=f[i-1]+lb[i];
}
cin>>t;
while(t--){
cin>>x;
for(;i<=n;i++){
if(f[i]>=x){
cout<<a[i]/lb[i]<<endl;
break;
}
}
}
return 0;
}