例如:
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) )吗?
是什么意思 (number) & (-number)?我搜索了它但却无法找到意义
我想i & (-i)在for循环中使用:
for (i = 0; i <= n; i += i & (-i))
Run Code Online (Sandbox Code Playgroud) 我发现很多人使用x += x & -x,x -= x & -x解决了区间树问题。你能解释一下这个方程的意思吗?
void update(int m, int x) {
m++;
while (m < N) {
t[m] = t[m] + x;
m += m & -m;
}
}
int query(int m) {
int result= 0;
m++;
while (m > 0) {
result = result + t[m];
m -= m & -m;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)