代码中的下标从0开始,原理是一样的
int f[N]; void upd(int x, int val){ for (int i = x; i >= 0; i = (i & (i + 1)) - 1) f[i] += val; } int get(int x){ int res = 0; for (int i = x; i < N; i |= i + 1) res += f[i]; return res; }
代码中的下标从0开始,原理是一样的
int f[N]; void upd(int x, int val){ for (int i = x; i >= 0; i = (i & (i + 1)) - 1) f[i] += val; } int get(int x){ int res = 0; for (int i = x; i < N; i |= i + 1) res += f[i]; return res; }