例如:
int get(int i) {
int res = 0;
while (i) {
res = (res + tree[i]) % MOD;
i -= ( (i) & (-i) );
}
return res;
}
Run Code Online (Sandbox Code Playgroud)
树更新功能:
void update(int i, int val) {
while (i <= m) {
tree[i] = (tree[i] + val) % MOD;
i += ( (i) & (-i) );
}
}
Run Code Online (Sandbox Code Playgroud)
你能用它解释一下他们在代码中做了什么( (i) & (-i) )吗?
我们i是一个有符号整数类型.考虑
i += (i&-i);
i -= (i&-i);
Run Code Online (Sandbox Code Playgroud)
最初的地方i>0.
来源:setter的在线编码拼图代码(没有任何解释/评论).
我正在用 C 编写代码,并希望找出最有效的方法来确定 2 除以一个数字的次数;即 5 = 0, 8 = 3。我的问题是,对于这段代码,我利用按位运算来加速运行时,总体代码是O(log N),有什么计算或分析可以优化这段代码吗?
int Prime_Factor_Two(int n) {
int k = 0;
while(~(n&1) + 2){
n = n >> 1;
k +=1;
}
return k;
}
Run Code Online (Sandbox Code Playgroud) 一个用于计算我遇到此语句的总和的函数 ..plz 帮助
int get_sum(int x) {
int p = 0, k;
for (k = x; k > 0; k -= k & -k)
p += bit[k];
return p;
}
Run Code Online (Sandbox Code Playgroud)