树状数组模版
2014-04-30 22:23
113 查看
C1 = A1
C2 = A1 + A2
C3 = A3
C4 = A1 + A2 + A3 + A4
C5 = A5
C6 = A5 + A6
C7 = A7
C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8
...
C16 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + A12 + A13 + A14 + A15 + A16
Cn = A(n – 2^k + 1) + ... + An
C2 = A1 + A2
C3 = A3
C4 = A1 + A2 + A3 + A4
C5 = A5
C6 = A5 + A6
C7 = A7
C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8
...
C16 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 + A9 + A10 + A11 + A12 + A13 + A14 + A15 + A16
Cn = A(n – 2^k + 1) + ... + An
int c[66666],n; int lowbit(int x) { return x&(-x); } void add(int x,int y) { for(int j=x;j<=n;j+=lowbit(j)) c[j]+=y; } void sub(int x,int y) { for(int j=x;j<=n;j+=lowbit(j)) c[j]-=y; } int sum(int x) { int sum=0; for(int j=x;j>0;j-=lowbit(j)) sum+=c[j]; return sum; } void qurry(int x,int y) { printf("%d\n",sum(y)-sum(x-1)); }
相关文章推荐