有
void add(int a, int b, int c, int x)
{
for (a; a < M; a += lowbit(a))
{
for (b; b < M; b += lowbit(b))
{
for (c; c < M; c += lowbit(c))
{
tr[a][b][c] += x;
}
}
}
}
int qry(int a, int b, int c)
{
a = min(a, M - 1);
b = min(b, M - 1);
c = min(c, M - 1);
int ret = 0;
for (; a; a -= lowbit(a))
{
for (; b; b -= lowbit(b))
{
for (; c; c -= lowbit(c))
{
ret += tr[a][b][c];
}
}
}
return ret;
}
和
void add(int a, int B, int c, int x)
{
for (int i = a; i < M; i += i & -i)
{
for (int j = B; j < M; j += j & -j)
{
for (int k = c; k < M; k += k & -k)
{
tr[i][j][k] += x;
}
}
}
}
int qry(int a, int B, int c)
{
a = min(a, M - 1);
B = min(B, M - 1);
c = min(c, M - 1);
int ret = 0;
for (int i = a; i; i -= lowbit(i))
{
for (int j = B; j ; j -= lowbit(j))
{
for (int k = c; k; k -= lowbit(k))
{
ret += tr[i][j][k];
}
}
}
return ret;
}
但是第一份代码全 WA,第二份却是对的,这是什么原因?