约 8 分钟
给 a[i] 加 v,要更新所有覆盖它的 c:从 i 出发不断 i+=lowbit(i)。void add(int i,int v){ for(;i<=n;i+=lowbit(i)) c[i]+=v; },只走 O(log n) 步。
a[i]
c
i+=lowbit(i)
void add(int i,int v){ for(;i<=n;i+=lowbit(i)) c[i]+=v; }
n=8 时,add(3,…) 会依次更新哪些下标?
add(3,…)
登录 后可看答案